【问题标题】:Java - Removing element from a Linked List using iteratorJava - 使用迭代器从链接列表中删除元素
【发布时间】:2014-04-20 12:13:48
【问题描述】:

我有一个程序可以读取添加到链表中的条目,下面的方法可以删除条目。目前,该方法似乎遍历列表,一旦找到所选条目,就会删除它以及它之前的所有条目,而不仅仅是单个条目。删除休息;使该方法只删除列表中的所有条目。

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 还很陌生。谢谢!

【问题讨论】:

  • 我觉得很好
  • 问题可能出在其他地方。 number 可能是Entry 的静态成员吗​​?
  • 我认为多余的条目根本不会被删除。我认为您通过检查迭代器而不是检查原始列表来自欺欺人地认为它们是。

标签: java linked-list iterator listiterator


【解决方案1】:

看起来像

entry.getNumber() == number

始终为 TRUE,因此问题不在此代码中,而在其他地方。

可能条目号定义为静态或列表中的所有元素都是同一个对象。

【讨论】:

  • 我已经设法让该方法正常运行。我注意到我在另一个类似方法的末尾有一个while循环来重置工作正常的迭代器。我将它添加到deleteEntry方法中,它现在可以工作了。我以前从未使用过链表,所以我不确定它是如何修复的或它的效率如何,但它终于可以工作了。 public void deleteEntry(int number) { while(entryIterator.hasNext()) { Entry entry = entryIterator.next(); if((entry.getNumber() == number)) { entryIterator.remove(); } } while(entryIterator.hasPrevious()) { entryIterator.previous(); } }
  • @user35538​​26 - 请阅读this,然后重新阅读ListIterator 的文档。您所做的只是错误,并没有解决您可能遇到的任何实际问题。
  • @kdgregory - 当然,一旦发布该评论,我就会测试以找出它解决问题的原因。我不会傻到巧合地找到解决方案并继续了解问题是什么以及如何解决的。我没有详细研究 API,我意识到错误是什么,结果我以为我每次都在创建一个新的迭代器,而实际上我正在重用同一个迭代器。这意味着必须先将迭代器重置到列表的开头,然后才能进行任何操作。
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 2019-09-11
  • 2021-05-05
  • 2020-11-25
  • 1970-01-01
  • 2020-03-18
相关资源
最近更新 更多