码迷,mamicode.com
首页 > 其他好文 > 详细

List 集合remove问题

时间:2015-07-21 12:51:58      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:java   集合删除   

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对象。

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




版权声明:本文为博主原创文章,未经博主允许不得转载。

List 集合remove问题

标签:java   集合删除   

原文地址:http://blog.csdn.net/liuxiao723846/article/details/46982611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!