循环删除list集合中的数据

JAVA中循环遍历list有三种方式:for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。
下面我们就来介绍循环删除list集合中的数据产生的问题:
1、for循环遍历删除元素

    if(list.get(i).equals("del"))
        list.remove(i);
}

这种方式删除会出现for循环删除完后list的size还有值,原因是删除某个元素后,list的大小发生了变化,而索引也在变化,所以会导致你在遍历的时候漏掉某些元素。比如当你删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,所以实际访问的是第3个元素。即你要删除的元素往前移,而你的索引往后移;这个方法适合删除某些指定的数据。
2、增强for循环`

for(String s:list){
    if(s.equals("del"))
        list.remove(s);
}

这种方式会造成,删除元素后继续循环会报错误信息ConcurrentModificationException,因为元素在使用的时候发生了并发的修改,导致异常抛出。但是删除完毕马上使用break跳出,则不会触发报错。
3、iterator遍历

Iterator<String> it = list.iterator();
while(it.hasNext()){
    String x = it.next();
    if(x.equals("del")){
        it.remove();
    }
}

这种方式可以正常的循环及删除。但要注意的是,使用iterator的remove方法,如果用list的remove方法同样会报上面提到的ConcurrentModificationException错误;
4、除去以上3种方式还可以有这种操作

public static void main(String[] args) {

		List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		list.add("e");
		for (int i = 0; i < list.size(); i++) { 
			// 循环删除集合中的元素
			list.remove(i);
			i--;
		}
	}

即每次删除完当前元素使用i–来回到前位置继续删除,这样也可以正常删除成功;

循环删除list中多个元素的,个人还是建议使用迭代器iterator方式。以上便是对循环删除list的个人见解,有不足之前请留言;


版权声明:本文为liuxialixiao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。