
在Java中List有三種遍歷方式,1.fori,2.foreach,3.Iterator
List<String> listTest = new ArrayList<>(8);
fori循環(huán)
int size = listTest.size();
for (int i = 0; i < size; i++) {
System.out.println("fori:"+listTest.get(i));
}
foreach循環(huán)
for (String str:listTest) {
System.out.println("foreach:"+str);
}
Iterator循環(huán)
Iterator iterator = listTest.iterator();
while (iterator.hasNext()){
System.out.println("Iterator:"+iterator.next());
}
思考 如何在list的循環(huán)中安全的刪除元素
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
總結
三種循環(huán)性能上有所差異,但是在遍歷是刪除元素應當使用Iterator迭代器!!
文章并不完善,請大佬指點??!