我有一个AVLTREE类,里面是一个内部类,它是一个迭代器。 迭代器仅由用户请求实例化。 假设我有这段代码:
tree.add(10);
tree.add(6);
tree.add(19);
Iterator<Integer> it1 = tree.iterator();
System.out.println(it1.next());
System.outrintln(it1.next());
tree.delete(10);
System.outrintln(it1.next());
sysrem将打印&#34; null&#34; ,althogh树有另一个值:19。 在这种情况下,如何处理特定迭代器的实例并将其当前节点更改为已删除节点的后继节点?
谢谢!
答案 0 :(得分:1)
在迭代它们时修改底层集合是一个有问题的案例,这就是为什么当你在{{1}中删除时,内置的Java集合会在你面前抛出ConcurrentModificationException
例如,循环for
是从集合中删除元素的更安全的方法。
至于接近迭代器,除非你在某处存储集合的每个迭代器并让迭代器允许内部调整&#34;否则你不能这样做。他们的地位,从长远来看,这是不可行的。