在Java中List有三种遍历方式,1.fori,2.foreach,3.Iterator
List<String> listTest = new ArrayList<>(8);
fori循环
int size = listTest.size();
for (int i = 0; i < size; i++) {
System.out.println("fori:"+listTest.get(i));
}
foreach循环
for (String str:listTest) {
System.out.println("foreach:"+str);
}
Iterator循环
Iterator iterator = listTest.iterator();
while (iterator.hasNext()){
System.out.println("Iterator:"+iterator.next());
}
思考 如何在list的循环中安全的删除元素
1.fori中删除
int size = listTest.size();
for (int i = 0; i < size; i++) {
System.out.println("fori:" + listTest.get(i));
listTest.remove(i);
}
java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
2. foreach中删除
for (String str : listTest) {
listTest.remove(str);
System.out.println("foreach:" + str);
}
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
3. Iterator中删除
Iterator iterator = listTest.iterator();
while (iterator.hasNext()) {
System.out.println("Iterator:" + iterator.next());
iterator.remove();
}
Iterator:a
Iterator:b
Iterator:c
Iterator:d
Iterator:e
Iterator:f
Iterator:g
总结
三种循环性能上有所差异,但是在遍历是删除元素应当使用Iterator迭代器!!
文章并不完善,请大佬指点!!