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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18995038/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 13:11:55  来源:igfitidea点击:

What does List Iterator's add() method do to the iterator?

javacollectionsiterator

提问by AnkitSablok

I want to be able to insert elements to the ArrayList<String>using ListIterator, but somehow I am confused even after reading the documentation related to the add method of the ListIteratorclass, if I do something like this

我希望能够向ArrayList<String>using插入元素ListIterator,但不知何故,即使在阅读了与ListIterator类的 add 方法相关的文档后,我还是感到困惑,如果我做这样的事情

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

What does this code snippet do to my list iterator, where does it move the list iterator?

这段代码片段对我的列表迭代器有什么作用,它将列表迭代器移到哪里?

When I run the following code I get the result as "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());
    }
}

Kindly tell how is this output being generated?

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

回答by nachokk

You are not using iterator properly. The correct way using iterators is traverse the list with the iterator itself rather than by index.

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

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

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

Read the ListIterator#add()

阅读ListIterator#add()

A simple example:

一个简单的例子:

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]

    }
 }

回答by Sunil Gadhavi

I don't know why you want to insert elements to ArraListby ListIterator. You can simply do this by ArrayList<String> list = new ArrayList<>(Arrays.asList(s));

我不知道你为什么要向ArraListby插入元素ListIterator。你可以简单地通过ArrayList<String> list = new ArrayList<>(Arrays.asList(s));

But anyway you've already added all the elements of an Arrayto ArrayListwith the approach you've mentioned. You just need to iterate through ArrayListin Proper way like this :

但无论如何,您已经添加的所有元素ArrayArrayList与做法你所提到的。你只需要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);
    }
  }
}

回答by neo java

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);
    }

}