2015-05-27 5 views
1

У меня есть вопрос о LinkedList итератораLinkedList итератора удалить

Если я использую следующий, предыдущий и удалить методы

, например:

name.add("Alvin") 
name.add("Keven") 
name.add("Jack") 

ListIterator<String> iterator = name.listIteraot(); //|AKJ 

iterator.next(); // A|KJ 
iterator.next(); // AK|J 

iterator.add("Nina") // AKN|J 

iterator.next(); // AKNJ| 

iterator.remove(); // AKN| 

В следующем, а затем удалить метод, который мы удалите элемент перед указателем итератора, как показано в примере:

PUT

Я запутался с предыдущим, а затем удалить, например

myLList.add("Mary"); 
myLList.add("John"); 
myLList.add("Sue"); 

ListIterator<String> iterator = myLList.iterator 

itorator.next(); 
itorator.next(); 
itorator.add("Robert"); 
itorator.pervios(); 
itorator.pervios(); 
itorator.remove(); 

System.out.println(myLList); 

ответ на который будет [Mary , Robert , Sue ]

как мы убираем за предыдущий! Удалим ли мы элемент справа?

Потому что я думал, что удаление будет всегда идти назад не вперед

+0

Ваш вопрос непонятен, кого вы хотите удалить? –

+0

мой вопрос заключается в том, как мы удалим после использования предыдущего, удалим ли элемент после указателя итератора или раньше, как вы видите на втором примере, о котором я говорил ранее [Mery, Robert, Sue], но мой ответ это было то, что мы удаляем «Мери» после того, как мы идем раньше .. теперь какой из них правильный и почему? Удалим ли элемент перед указателем или после указателя –

+1

Прочтите javadoc: он говорит: * Обратите внимание, что методы remove() и set (Object) не определены в терминах позиции курсора; они определены для работы с последним элементом, возвращаемым вызовом next() или previous(). * И когда вы отправляете код, отправляете код, который компилируется. –

ответ

3

мой вопрос, как мы удалить после использования предыдущей, мы удалить элемент после того, как указатель итератора или раньше?

Из документации ListIterator#remove:

Удаляет из списка последний элемент, который был возвращен на следующий() или предыдущей() (дополнительная работа). Этот вызов может быть сделан только один раз за , для вызова следующего или предыдущего. Это можно сделать, только если add (E) не был , вызванным после последнего вызова следующего или предыдущего.

Другими словами, вы не удаляете после или перед указателем. В документации указано, что метод remove не зависит от позиции указателя и удалит объект, возвращенный последним вызовом, в следующий/предыдущий.

Однако по-прежнему существует указатель в ListIterator, который находится между элементом, как описано в верхней части ListIteratordocumentation.

+0

Итак, вы имеете в виду, что мы удаляем элемент, который мы пропустим, чтобы перейти к предыдущему ??? и элемент, который мы пропускаем дальше? не имеет значения направление удаления! –

+1

вы не поняли мою точку зрения, они учат нас, что если мы идем дальше между элементами, мы помещаем вертикальную линию между элементом и перемещаем ее с каждым следующим, а затем, когда у нас есть метод удаления, мы удаляем элемент, который есть до эта линия .. –

+0

они учат нас тому, что и в предыдущем методе мы помещаем эту строку и идем дальше, поэтому я смутился, как они удалили Джона, который был после линии, и покинули Марей, который был до линии: S –

Смежные вопросы