【问题标题】:What does List Iterator's add() method do to the iterator?List Iterator 的 add() 方法对迭代器做了什么?
【发布时间】:2013-09-30 11:05:02
【问题描述】:

我希望能够使用ListIteratorArrayList<String> 插入元素,但是即使在阅读了与ListIterator 类的add 方法相关的文档后,如果我这样做,我还是会感到困惑

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

这段代码 sn-p 对我的列表迭代器做了什么,它将列表迭代器移动到哪里?

当我运行以下代码时,我得到的结果是“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(),它将添加到放置迭代器的位置...在第一个元素中
  • 如何使用它将元素插入到列表中?
  • 你有没有机会阅读API....
  • while(listIterator.hasNext()){ listIterator.next()... listIterator.add(..);
  • @nachokk :我应该这样做 for(int i = 0 ; i

标签: java collections iterator


【解决方案1】:

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

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 将这些字符串添加到列表中
  • 你没有list 然后..你有一个数组..如果你仍然想使用listIterator,你必须将该数组转换为Arrays.asList()的列表跨度>
  • 但是我要添加元素的列表与数组不同,我该怎么做?
  • @AnkitSablok 然后返回list.toArray()
  • @AnkitSablok 你有什么好的理由需要使用迭代器来做到这一点吗?通常你会在这里使用任何答案:stackoverflow.com/questions/12149314/…
【解决方案2】:

我不知道你为什么要通过ListIteratorArraList 插入元素。 您可以通过ArrayList&lt;String&gt; list = new ArrayList&lt;&gt;(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);
    }
  }
}

【讨论】:

    【解决方案3】:
    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);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-13
      • 1970-01-01
      • 2012-06-27
      • 2011-03-29
      • 2022-01-19
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多