我有一个 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());
系统将打印“null”,尽管树有另一个值:19。 在这种情况下,如何处理特定迭代器的实例并将其当前节点更改为已删除节点的后继节点?
谢谢!
最佳答案
在迭代底层集合时修改它们是一个有问题的情况,这就是为什么当您在 for< 中删除它们时,Java 的内置集合会向您抛出
循环。 ConcurrentModificationException
。例如,iterator.remove()
是从集合中删除元素的更安全的方法。
至于接近迭代器,除非将集合的每个迭代器存储在某处并且让迭代器允许对其状态进行内部“调整”,否则您不能这样做,从长远来看,这不太可行。
关于java嵌套类数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23709343/