2017-09-13 55 views
2

我试图使用remove方法,但我正在逐渐搞砸了,因为我不断收到错误的: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(); 

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

+0

的问题是,你得到一个新的ListIterator对象,当你做'list1.listIterator()'第二次。而'.remove()'只会在'.next()'或者'.previous()'调用后才起作用。通过分配一个变量来重新使用第一个“ListIterator”。 – kaza

回答

3

您的代码是正确的,因为您可以每次调用ListIterator#remove()一次next()(请参阅Javadoc)。但是,在您的代码中,实际上您正在调用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

+0

试过,但现在我越来越无法找到listIterator的符号,只是为了确保我也输入了它! – user7703770

+0

@ user7703770我认为它应该已经可用,如果没有,'ListIterator'是'java.util'包的一部分。 –

+0

这就是为什么我感到困惑,因为它说 AVA:12:错误:找不到符号 ListIterator list1itr = list1.listIterator(); 我们必须做新的或第一次使用它? – user7703770