最近遇到一个小问题,我将其简化为下列代码,List的remove()方法在下列颜色注重的代码执行的源码也是不同的~

        List<Integer> list=new ArrayList<>();
list.add(11);
list.add(12);
list.add(13);
list.add(14);
list.add(15);
list.add(16); /*for (Integer i=0; i<list.size(); i++) {
if (list.get(i) % 2 == 0) {        
list.remove(i); //执行删除指定位置的元素的功能 执行结果 [11,12,13,14,15,16]
}
}*/
for (int i=0; i<list.size(); i++) {
if (list.get(i) % 2 == 0) {
list.remove(i); //执行删除指定元素的功能 执行结果 [11,13,15]
}
}
for(Integer i : list){
System.out.println(i);
}
}

上述执行的代码中remove调用的不是同一个方法分别是list重写的两个remove方法,分别为

    public E remove(int index); //执行删除指定位置的元素的功能
public boolean remove(Object o) //执行删除指定元素的功能
 // 删除ArrayList指定位置的元素
public E remove(int index) {
RangeCheck(index);//检查index是否超出list大小范围,否则抛出异常
modCount++;
E oldValue = (E) elementData[index];//elementData是实现list的数组
int numMoved = size - index - 1;//当执行删除操作是后面的元素全部向前面移动一位
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null;
return oldValue;
}
// 删除ArrayList的指定元素
public boolean remove(Object o) {
if (o == null) {
  for (int index = 0; index < size; index++)
  if (elementData[index] == null) {
  fastRemove(index);
    return true;
}
} else {
for (int index = 0; index < size; index++)
   if (o.equals(elementData[index])) {
   fastRemove(index);
   return true;
   }
}
return false;
}
  //快速删除第index个元素
  private void fastRemove(int index) {
modCount++;
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null;
}

最新文章

  1. css学习归纳总结(一) 转
  2. U-boot的目录结构及spl功能
  3. 解决ie8(及其以下)不支持getElementsByClassName的问题
  4. 微信公众平台开放JS-SDK(微信内网页开发工具包)
  5. 关于 微软必应词典客户端(pc) 的案例分析
  6. Ubuntu中设置静态IP和DNS
  7. 通过printf设置Linux终端输出的颜色和显示方式
  8. js实现表单序列化的两种方法。
  9. Tsung测试openfire服务器
  10. webkit浏览器渲染影响因素分析
  11. 怪兽z主机标准版视频测试。
  12. JOSN反串行化
  13. oracle数据库使用心得之与SQL serve数据库的差异
  14. SPFA+SLF+LLL
  15. HTML DOM 属性
  16. rest framework错误笔记——身份验证和权限
  17. Java知多少(8)类库及其组织结构
  18. Gravitee.io Access Management 组件
  19. mac上ssh工具,包含简易的文件传输功能
  20. spring-security权限控制详解

热门文章

  1. 【HNOI2012】永无乡 题解(并查集+线段树合并)
  2. iOS开发多线程在实际项目中的运用
  3. demo2动态加载显示商品详情页
  4. kubeadm部署1.17.3[基于Ubuntu18.04]
  5. react 样式冲突解决方案 styled-components
  6. C#经典算法实践,回顾往生,更是致敬《算法导论》
  7. 【python接口自动化】- 使用requests库发送http请求
  8. add application window with unknown token XXX Unable to add window;is your activity is running?
  9. myBatis源码解析-配置文件解析(6)
  10. 实现直方图均衡化(java+opencv)