对于 java 中 list 集合的遍历是我们开发中很长见到的操作,平时用的较多的有迭代器的方式或者是通过for循环遍历,那这两者有怎样的区别呢?
在对list进行遍历输出时效果是一样的,都能有效的输出 list 中的元素,但是看起来 for 循环会更简洁一些:
List<String> list = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
list.add(i + "==list");
}
// 1.for循环遍历 list
for (String object : list) {
System.out.print(object);
}
// 2.迭代器遍历 list
ListIterator iterator = list.listIterator();
while (iterator.hasNext()) {
System.out.print(iterator.next());
}
但是在丢List 进行remove操作时,要注意:
for循环在删除元素时,会改变你 list.size() 的大小,因此会导致错误,一般解决办法是将需要留下的list元素,放到一个新的 list中,作为遍历删除的结果。
而通过迭代器的方式,进行 remove() 操作不仅会删除元素,还会对 list 集合的下标进行重新维护,因此,在删除操作时建议使用这种方式。
// 通过for 循环remove元素,会报ConcurrentModificationException 错误
for (String object : list) {
if (object.length() > 7) {
list.remove(object);
}
}
// 通过迭代器的遍历删除
ListIterator iterator = list.listIterator();
while (iterator.hasNext()) {
String object = String.valueOf(iterator.next());
if (object.length() > 7) {
iterator.remove();
}
}