How to solve Java iterator exception (IteratorException)
In Java programming, iterator (Iterator) is a commonly used data structure used to traverse collections or elements in the list. However, if you use iterators incorrectly, iterator exceptions (IteratorException) may be thrown, causing program errors.
This article will introduce the common causes of iterator exceptions and how to use iterators correctly to avoid exceptions.
Reason 1: Concurrent modification
The iterator is designed to traverse the elements in a collection or list. During the traversal process, it needs to obtain the lock of the internal data structure to ensure the correctness of the traversal. . Therefore, when other threads modify the collection or list during the iterator traversal process, a concurrent modification exception (ConcurrentModificationException) will occur.
Sample code:
Listlist = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); if (item.equals("a")) { list.remove(item); // 在遍历过程中删除元素 } }
Solution:
During the iterator traversal process, do not use the set or list modification method (such as remove) to modify the data, but Use the iterator's remove method.
Modified sample code:
Listlist = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); if (item.equals("a")) { iterator.remove(); // 使用迭代器的remove方法来删除元素 } }
Cause two: iterator status error
Iterator has three states: available (hasNext), acquired (next) and deleted (remove). When using iterators correctly, you need to call these methods in the correct order. Otherwise, an iterator exception will be thrown.
Sample code:
Listlist = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { iterator.remove(); // 错误的调用了remove方法,应该在调用next后再调用remove String item = iterator.next(); System.out.println(item); }
Solution:
The correct order of using iterators: first call the hasNext method, then the next method, and finally the remove method.
Modified sample code:
Listlist = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); iterator.remove(); // 先调用next再调用remove System.out.println(item); }
Summary:
The correct use of iterators is the key to avoiding iterator exceptions. During the traversal process, do not modify the collection or list, but use the iterator's remove method to delete elements. At the same time, it is also very important to call the iterator methods (hasNext, next, remove) in the correct order.
By following the above principles, we can avoid the occurrence of iterator exceptions and make the program more robust and reliable.
The above is the detailed content of How to solve Java iterator exception (IteratorException). For more information, please follow other related articles on the PHP Chinese website!