2014-05-17 2 views
0

У меня есть класс AVLTREE, а внутри него внутренний класс, который является итератором. Итератор инстанцируется только по запросу пользователя. Предположим, у меня есть этот код:java вложенный элемент данных класса

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 будет печатать «нуль», Althogh дерево имеет другое значение: 19. Как подойти к экземпляру конкретного итератора и изменить свой текущий узел, чтобы быть преемник удаленного узла в таких случаях?

Спасибо!

+0

try 'it1.remove()' if 'it1.next() == 10' –

+0

Проблема: я не реализовал метод remove() (не был в описании excersize), и он должен быть в классе раздел не в основном методе. – user3150902

+0

все зависит от реализации вами итератора и структуры данных, и каковы ваши требования. –

ответ

1

Изменение базовой коллекции при итерации через них является проблематичным случаем, поэтому встроенные коллекции Java будут бросать ConcurrentModificationException на ваше лицо, когда вы удаляете их в то время как в цикле for, например. iterator.remove() - это более безопасный способ удаления элементов из коллекции.

Что касается приближения к итератору, вы не можете, если вы не храните каждый итератор коллекции где-нибудь, и пусть итераторы допускают внутреннюю «настройку» своего статуса, что в конечном итоге не очень возможно.

0

Вы можете использовать iterator.remove() для безопасного удаления текущего элемента в базовой коллекции.