首先我们了解一下List系列集合的四种遍历方式
1.准备数据
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
2.迭代器遍历删除
Iterator<String> it = list.iterator();
while(it.hasNext()){
String next = it.next();
if ("b".equals(next)){
// list.remove("b");
it.remove();
}
}
需要注意的是这里我注释了List集合的remove方法,它会报一个叫做ConcurrentModificationException的异常,因为remove方法底层实际上还是利用循环索引来实现的,而当我们使用list的remove方法时,在删除的时候索引又往下移动,会导致漏删,而java为了避免这种低级错误会直接报异常,所以我们需要使用Iterator迭代器的专属remove方法来进行删除,而迭代器自己的remove方法在进行删除时相当于进行了一次递增再递减,避免了漏删的情况。
3.增强型for遍历删除
for (String s:list
) {
if("b".equals(s)){
list.remove("b");
}
}
foreach方法会报同样的异常,foreach相当于是简单的for循环,主要是用于遍历的,不建议使用其进行元素的增删改。
4.lambda表达式
list.forEach(s->{
if ("b".equals(s)) {
list.remove("b")
}
});
lamda表达式的内部也是通过foreach实现的,所以也不能进行删除
5.for循环
for循环有两种方法,一种是模仿Iiterator的remove方法在删除时索引自减,第二种就是从末尾开始遍历,由于过于简单就交给大家自己练习