关于List的remove()方法
2024-10-09 15:52:14
最近遇到一个小问题,我将其简化为下列代码,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;
}
最新文章
- css学习归纳总结(一) 转
- U-boot的目录结构及spl功能
- 解决ie8(及其以下)不支持getElementsByClassName的问题
- 微信公众平台开放JS-SDK(微信内网页开发工具包)
- 关于 微软必应词典客户端(pc) 的案例分析
- Ubuntu中设置静态IP和DNS
- 通过printf设置Linux终端输出的颜色和显示方式
- js实现表单序列化的两种方法。
- Tsung测试openfire服务器
- webkit浏览器渲染影响因素分析
- 怪兽z主机标准版视频测试。
- JOSN反串行化
- oracle数据库使用心得之与SQL serve数据库的差异
- SPFA+SLF+LLL
- HTML DOM 属性
- rest framework错误笔记——身份验证和权限
- Java知多少(8)类库及其组织结构
- Gravitee.io Access Management 组件
- mac上ssh工具,包含简易的文件传输功能
- spring-security权限控制详解
热门文章
- 【HNOI2012】永无乡 题解(并查集+线段树合并)
- iOS开发多线程在实际项目中的运用
- demo2动态加载显示商品详情页
- kubeadm部署1.17.3[基于Ubuntu18.04]
- react 样式冲突解决方案 styled-components
- C#经典算法实践,回顾往生,更是致敬《算法导论》
- 【python接口自动化】- 使用requests库发送http请求
- add application window with unknown token XXX Unable to add window;is your activity is running?
- myBatis源码解析-配置文件解析(6)
- 实现直方图均衡化(java+opencv)