尝试使用Listiterator方法打印一个列表后添加更多字符串,但它不打印也不会出现任何错误

时间:2018-01-09 07:30:07

标签: java

新名称未添加到列表中

import java.util.*;

public class ListItrators34 {

    public static void main(String[] args) {
        ArrayList<String> name = new ArrayList<String>(10);
         name.add("Nishant");
         name.add("Suparna");
         name.add("Dinesh");
         name.add("Gagan");
         name.add("Aparna");

         ListIterator<String> itr = name.listIterator(); 
          while (itr.hasNext())// This method will print the list in the same order as "Top to Bottom"
              System.out.println(itr.next());
           name.add("Akshay");
           name.add("Rohan");
           while(itr.hasNext())
               System.out.println(itr.next());

新名称未添加到上一个列表

4 个答案:

答案 0 :(得分:0)

插入新数据后,不能使用相同的迭代器。相反,您可以使用变量来记录位置。

ArrayList<String> name = new ArrayList<String>(10);
name.add("Nishant");
name.add("Suparna");
name.add("Dinesh");
name.add("Gagan");
name.add("Aparna");

int index = 0;
while (index < name.size())
    System.out.println(name.get(index++));

name.add("Akshay");
name.add("Rohan");

while (index < name.size())
    System.out.println(name.get(index++));

答案 1 :(得分:0)

列表中的名称是正确的。这是因为第二次调用itr.hasNext()的结果返回false。你已经完成了迭代器,所以下一步就没有了。避免重用迭代器。

答案 2 :(得分:0)

没有错。当AkshayRohan未在列表中时,将创建迭代器。虽然迭代器用于遍历列表中的元素,但是迭代器现在不知道列表中有更多的东西。

此外,Javadoc已经说过迭代器是故障快速

  

此类的迭代器和listIterator返回的迭代器   方法是快速失败的:如果列表在结构上被修改了   创建迭代器之后的时间,除了通过之外的任何方式   迭代器自己删除或添加方法,迭代器会抛出一个   ConcurrentModificationException的。因此,面对并发   修改,迭代器快速而干净地失败,而不是   在不确定的时间冒着任意的,非确定性的行为   在将来。

因此,当底层列表发生变化时,API不会期望迭代器运行。

答案 3 :(得分:0)

您获得了ConcurrentModificationException,因为您修改了列表,之后又重新使用了相同的ListIterator

问题可以通过重新初始化迭代器来解决:

ArrayList<String> name = new ArrayList<String>(10);
name.add("Nishant");
name.add("Suparna");
name.add("Dinesh");
name.add("Gagan");
name.add("Aparna");

ListIterator<String> itr = name.listIterator();
while (itr.hasNext())// This method will print the list in the same order as "Top to Bottom"
    System.out.println(itr.next());
name.add("Akshay");
name.add("Rohan");

itr = name.listIterator();
while(itr.hasNext())
    System.out.println(itr.next());

但你真的需要使用ListIterator吗? for循环可能更合适,更清晰:

ArrayList<String> names = new ArrayList<String>(10);
names.add("Nishant");
names.add("Suparna");
names.add("Dinesh");
names.add("Gagan");
names.add("Aparna");

for (String name : names) {
    System.out.println(name);
}
names.add("Akshay");
names.add("Rohan");
for (String name : names) {
    System.out.println(name);
}