11

我希望能够将元素插入到ArrayList<String>using ListIterator,但不知何故,即使在阅读与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());
    }
}

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

4

3 回答 3

17

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

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]

    }
 }
于 2013-09-25T02:15:05.870 回答
0

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

但无论如何,您已经使用您提到的方法添加了 an Arrayto的所有元素。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);
    }
  }
}
于 2017-05-28T14:38:22.763 回答
-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);
    }

}
于 2019-03-12T16:18:24.550 回答