ArrayList.remove()的正确用法(Java随笔)

ArrayList在遍历中删除元素的na些坑

数据封装:

ArrayList list =new ArrayList();
		list.add(1);
		list.add(2);
		list.add(2);
		list.add(4);

错误用法1删除不完全,for遍历移除多个元素时,size是会改变的,即移除一个元素,size减一,则下一次遍历到的元素实际为i+2;解决:在移除元素后,设置i--)

for(int i=0;i

修改1:

for(int i=0;i

错误用法2:迭代器中使用ArrayList.remove(),ArrayList.remove()修改了modCount值,而迭代器中的next()方法中每次调用都会检查modCount与expectedModCount是否相等,不等则表示ArrayList结构改变,抛出异常)

Iterator it=list.iterator();
while(it.hasNext()) {
	Integer i;
	if((i=it.next())==2) {//chickForComodification();
		list.remove(i);
	}
}
System.out.println(list.toString());
/**output:
*Exception in thread "main" java.util.ConcurrentModificationException
*/

修改2:

Iterator it=list.iterator();
while(it.hasNext()) {
	if(it.next()==2) {
		it.remove();
	}
}
System.out.println(list.toString());
/**output:
*[1, 4]
*/

错误用法3:for加强循环中使用ArrayList.remove(),因为for加强循环采用迭代器技术进行遍历)

for(Integer i:list) {
	if(i==2) {
		list.remove((Integer)i);
	}
}
System.out.println(list.toString());
/**output:
*Exception in thread "main" java.util.ConcurrentModificationException
*/

修改3:

for(Integer i: new ArrayList(list)) {
	if(i==2) {
		list.remove((Integer)i);
	}
}
System.out.println(list.toString());
/**output:
*[1, 4]
*/

 

你可能感兴趣的:(容器)