【问题标题】:remove method throws error in List interface iteratorremove 方法在 List 接口迭代器中引发错误
【发布时间】:2017-09-13 01:49:28
【问题描述】:

我正在尝试使用 remove 方法,但我搞砸了,因为我不断收到错误:

 List<String> list1 = new ArrayList<String>();
      list1.add("Apple");
      list1.add("Bus");
      list1.add("Cat");
      list1.add("Dog");
      String ne = list1.listIterator().next();
System.out.println(ne);
list1.listIterator().remove();

remove 语句抛出错误??谁能告诉我为什么? 当我只使用迭代器代替 listIterator 时,同样的事情?

【问题讨论】:

  • 问题是当您第二次执行list1.listIterator() 时,您将获得一个新的 ListIterator 对象。 .remove() 只能在 .next().previous() 调用之后工作。通过分配给变量来重新使用第一个ListIterator

标签: java iterator


【解决方案1】:

您的代码是正确的,因为每次调用next() 时,您都可以调用一次ListIterator#remove()(请参阅Javadoc)。但是,在您的代码中,您实际上是在 new 列表迭代器上调用 remove(),而不是您之前使用的迭代器。试试下面的代码,希望它会清楚你做错了什么:

List<String> list1 = new ArrayList<String>();
list1.add("Apple");
list1.add("Bus");
list1.add("Cat");
list1.add("Dog");
// retain a reference to the same list iterator
ListIterator<String> list1itr = list1.listIterator();
String ne = list1itr.next();
System.out.println(ne);
list1itr.remove();

Demo

【讨论】:

  • 试过了,但现在我找不到 listIterator 的符号,只是为了确保我也导入了它!!
  • @user7703770 我认为它应该已经可用,如果没有,ListIteratorjava.util 包的一部分。
  • 这就是为什么我很困惑,因为它说 ava:12: error: cannot find symbol ListIterator list1itr = list1.listIterator();我们第一次使用它需要做一些新的事情吗??
  • @user7703770 抱歉,我有一个错字,更新应该可以正常运行,查看演示。
猜你喜欢
  • 2018-04-05
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
相关资源
最近更新 更多