java的list集合中。使用remove删除元素:

方法一:

static List<Integer> list3 = new ArrayList<Integer>();
static {
list3.add(1);
list3.add(2);
list3.add(2);
list3.add(2);
list3.add(2);
}
private static void remove(List<Integer> list3) {
for (int i=0;i<list3.size();i++) {
if(list3.get(i) == 2) {
list3.remove(i);
}
}
print(list3);
}


打印结果:1。2。2

造成问题的解决办法是,在使用remove删除list中元素时,list集合的size会发生变化。所以不能达到预期。


方法二:

private static void remove(List<Integer> list3) {
for(int i = 0 , len= list3.size();i<len;++i){
if(list3.get(i)==2){
list3.remove(i);
--len;//降低一个
--i;//多谢deny_guoshou指正,假设不加会出现评论1楼所说的情况。
}
}
print(list3);
}


打印结果:1

因为动态的计算list大小,所以能够得到正确答案


方法三:

Iterator<String> sListIterator = list.iterator();  
while(sListIterator.hasNext()){
String e = sListIterator.next();
if(e.equals("3")){
sListIterator.remove();
}
}

List接口内部实现了Iterator接口。提供开发人员一个iterator()得到当前list对象的一个iterator对象。


注:对于并发情况,更因该使用第三种方法(迭代器)。否则一定会出现并发问题。