List移除元素

简单的陷阱 试了才知道 

今天试面

面试官:ArrayList常用吗?

回答:常用

面试官:ArrayList存放整数移除负数和零不能使用新的List写在简历的后边。

  :(心想太简单了吧)个人认为在移除元素上边LinkedList更好点

面试官:不用管效率你写吧!

  :迅速写出

List list = new ArrayList();
list.add(8);
list.add(-1);
list.add(0);
list.add(1);
list.add(2);

int size = list.size();
for(int i=0;iif(list.get(i)<1){
list.remove(i);
}
}

当时没意识到有错 其实大错特错了

问题的关键在哪我忘记了ArrayList是动态数组实现的 每次移除元素时数组的长度就变化了 (上边执行就会报错)

还有即使知道size每次都要减1我们移除元素-1时i=1的 但是当我们想移除0是问题又出来了在新的list中0的下标变成了1 所以我们还是要移除下标为1(i=1)的元素

但是上边的程序呢i=2了已经无法挽回了 所以我们的list.get(i) 变成了list.get(2)=1 我们的0给落下了

两个字粗心

其实就差两行代码

List list = new ArrayList();
list.add(8);
list.add(-1);
list.add(0);
list.add(1);
list.add(2);

int size = list.size();
for(int i=0;iif(list.get(i)<1){
list.remove(i);

i--;

size--;
}
}

写下来给自己提个醒不要以为简单 越简单越是要细心

你可能感兴趣的:(java,List,ArrayList)