List Iterator 的 add() 方法对迭代器做了什么?

12

我希望能够使用ListIteratorArrayList<String>中插入元素,但是我在阅读了ListIterator类的文档和add方法的相关说明之后仍然感到困惑。如果我像下面这样做会怎么样:

for(int i = 0 ; i < list.size() ; ++i)
   listIterator.add( list.get(i) );

这段代码对我的列表迭代器做了什么?它把列表迭代器移动到哪里了?

当我运行以下代码时,结果为"Hi" -:

import java.util.ArrayList;
import java.util.ListIterator;

public class ListIter {
    public static void main(String[] args) {

        String[] s = {"Hi", "I", "am", "Ankit"};

        ArrayList<String> list = new ArrayList<>();
        ListIterator<String> listIterator = list.listIterator();

        for (int i = 0; i < s.length; ++i) {
            listIterator.add(s[i]);
        }

        while (listIterator.hasPrevious()) {
            listIterator.previous();
        }

        System.out.println(listIterator.next());
    }
}

请告诉我这个输出是如何生成的?


您没有正确使用迭代器,如果您从未调用next(),它将在迭代器所在的位置添加到第一个元素中... - nachokk
我该如何使用它将元素插入列表中? - AnkitSablok
4
你有机会阅读API...了吗? - Jayamohan
在(listIterator.hasNext())的同时{ listIterator.next()... listIterator.add(..)}; - nachokk
@nachokk:那我应该像这样做吗?for(int i = 0 ; i < 10 ; ++i){ while(listIterator.hasNext()){listIterator.next();listIterator.add(i);}}? - AnkitSablok
显示剩余2条评论
3个回答

20

您没有正确使用迭代器。使用迭代器的正确方式是通过迭代器本身遍历列表,而不是通过索引。

ListIterator<SomeObject> listIterator = list.listIterator();

while(listIterator.hasNext()){
  SomeObject o = listIterator.next();
  listIterator.add(new SomeObject());
}

阅读ListIterator#add()

一个简单的例子:

public static void main(String args []){      
        List<String> list= new ArrayList<String>();
        list.add("hi");
        list.add("whats up");
        list.add("how are you");
        list.add("bye");

        ListIterator<String> iterator = list.listIterator();
        int i=0;
        while(iterator.hasNext()){
            iterator.next();
            iterator.add(Integer.toString(i++));                
        }

        System.out.println(list);
        //output: [hi, 0, whats up, 1, how are you, 2, bye, 3]

    }
 }

我有一个像这样的方法 "public void addToList(String[] strings){}",它接受一个字符串数组,并且我想使用listIterator将这些字符串添加到列表中。 - AnkitSablok
如果你没有一个 list,那么你有一个数组。如果你仍然想使用 listIterator,你需要使用 Arrays.asList() 将该数组转换为 List。 - nachokk
但是我想要添加元素的列表与数组不同,我该怎么做? - AnkitSablok
@AnkitSablok 然后返回list.toArray() - nachokk
@AnkitSablok 你有必要使用迭代器来完成这个任务吗?通常你只需要使用这里的任何一个答案:https://dev59.com/hmct5IYBdhLWcg3wXsMy - nos

0

我不知道为什么你要使用ListIterator来向ArraList中插入元素。 你只需要用这个方法就可以了:ArrayList<String> list = new ArrayList<>(Arrays.asList(s));

但是无论如何,你已经使用你提到的方法将一个Array的所有元素添加到了ArrayList中。你只需要按照正确的方式迭代ArrayList

import java.util.ArrayList;
import java.util.ListIterator;

 public class ListIteratorTest {
  public static void main(String[] args) {
    String[] s = { "Hi", "I", "am", "Ankit" };

    ArrayList<String> list = new ArrayList<>();
    ListIterator<String> listIterator = list.listIterator();

    for (int i = 0; i < s.length; ++i) {
        listIterator.add(s[i]);
    }

    //Iterate using ListIterator
    while (listIterator.hasNext()) {
        System.out.println((String) listIterator.next());
    }

    //Iterate by Enhanced For Loop
    for (String val : list) {
        System.out.println(val);
    }
  }
}

-1
import java.util.ArrayList;
import java.util.ListIterator;

public class listTest {

    public static void main(String[] args) {

         ArrayList<String> al = new ArrayList<String>();
         al.add("test");
         al.add("ref");
         ListIterator<String> ltr= al.listIterator();
         while(ltr.hasNext())
         {
         int pos =ltr.nextIndex();
          if (pos==1)
            {
              ltr.add("ted");
           }
              ltr.next();
         }
         System.out.println(al);
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接