Java – удаление элемента из связанного списка с помощью итератора

У меня есть программа, которая считывает записи, которые добавляются в связанный список, и метод, описанный ниже, который удаляет записи. В настоящее время метод проходит по списку и, найдя выбранную запись, удаляет ее а также все записи перед ней, а не только отдельную запись. Снятие разрыва; заставляет метод просто удалить все записи в списке.

LinkedList<Entry> entryList = new LinkedList<Entry>();
ListIterator<Entry> entryIterator = entryList.listIterator();

public void deleteEntry(int number) {
    while(entryIterator.hasNext()) {
        Entry entry = entryIterator.next();
        if((entry.getNumber() == number)) {
                entryIterator.remove();
                //break;
        }
    }
}

У меня такое ощущение, что проблема в другом, но не могу понять - я новичок в java. Спасибо!


person user3553826    schedule 20.04.2014    source источник
comment
Выглядит просто отлично для меня   -  person MightyPork    schedule 20.04.2014
comment
Проблема скорее всего в другом. Возможно, number является статическим членом Entry?   -  person Keppil    schedule 20.04.2014
comment
Я не думаю, что лишние записи удаляются вообще. Я думаю, вы обманываете себя, думая, что это так, изучая итератор вместо того, чтобы изучать исходный список.   -  person Dawood ibn Kareem    schedule 20.04.2014


Ответы (1)


Похоже

entry.getNumber() == number

всегда TRUE, поэтому проблема не в этом коде, а где-то еще.

Возможно, номер записи определен как статический или все элементы в списке являются одним и тем же объектом.

person Smertokogt    schedule 20.04.2014
comment
Мне удалось заставить метод вести себя правильно. Я заметил, что у меня был цикл while в конце другого похожего метода для сброса итератора, который работал нормально. Я добавил его в метод deleteEntry, и теперь он работает. Я никогда раньше не использовал связанные списки, поэтому я не уверен, как это исправлено или насколько это эффективно, но, наконец, это работает. public void deleteEntry (int number) { while (entryIterator.hasNext()) { Entry entry = entryIterator.next(); if((entry.getNumber() == число)) { entryIterator.remove(); } } while(entryIterator.hasPrevious()) { entryIterator.previous(); } } - person user3553826; 20.04.2014
comment
@user3553826 — прочитайте это, а затем перечитайте документацию для ListIterator. То, что вы делаете, просто неправильно и не решает вашей реальной проблемы. - person kdgregory; 20.04.2014
comment
@kdgregory - Конечно, как только я опубликовал этот комментарий, я проверил, почему он решил проблему. Я не был бы настолько глуп, чтобы случайно найти решение и начать изучать, в чем проблема и как ее решить. Я не изучал подробно API и понял, в чем была ошибка, оказывается, я думал, что каждый раз создаю новый итератор, когда на самом деле повторно использовал один и тот же. Это означало, что итератор должен быть сброшен в начало списка, прежде чем можно будет выполнить какие-либо операции. - person user3553826; 20.04.2014