Java集合框架中迭代器失效问题示例
Java集合框架中的迭代器(Iterator)失效问题通常发生在迭代过程中对集合进行了结构性修改(如增加、删除元素),而没有通过迭代器自身的方法进行。以下是一些常见的迭代器失效问题示例:
示例1:使用for-each
循环遍历并删除元素```javaList list = new ArrayList<>(Arrays.asList(“A”, “B”, “C”, “D”));
for (String item : list) {
if (“B”.equals(item)) {
list.remove(item); //这里会导致迭代器失效 }
}### 示例2:使用迭代器遍历并删除元素
javaList
Iterator
while (iterator.hasNext()) {
String item = iterator.next();
if (“B”.equals(item)) {
list.remove(item); //这里会导致迭代器失效 }
}``###正确的做法当需要在遍历过程中删除元素时,应该使用迭代器自身的
remove`方法,如下所示:
javaList<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if ("B".equals(item)) {
iterator.remove(); // 使用迭代器的remove方法 }
}
###其他结构性修改除了删除元素外,增加元素也可能导致迭代器失效。例如:
javaList<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if ("B".equals(item)) {
list.add("E"); //这里会导致迭代器失效 }
}
###总结在使用Java集合框架的迭代器时,应避免在迭代过程中对集合进行结构性修改(增加、删除元素),除非使用迭代器自身的remove
方法。这样可以避免迭代器失效的问题,确保程序的正确性和稳定性。
还没有评论,来说两句吧...