浅谈list的remove方法

List 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微微一笑满城空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值