2013-09-25 3 views
7

Я хочу, чтобы иметь возможность вставлять элементы в ArrayList<String> с помощью ListIterator, но почему-то я запутался даже после прочтения документации, связанной с методом добавления в ListIterator класса, если я что-то вроде этогоЧто делает метод Add() метода List Iterator для итератора?

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

Что делает этот фрагмент кода для моего итератора списка, где он перемещает итератор списка?

Когда я запускаю следующий код я получить результат как «Привет» -:

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

Пожалуйста, расскажите, как этот выход генерируется?

+0

Вы не используете итератор должным образом, он будет добавлен, где итератор помещается ... в первом элементе, если вы не никогда не называют 'рядом() ' – nachokk

+0

Как его использовать для вставки элементов в список? – AnkitSablok

+3

У вас была возможность прочитать [API ....] (http://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html#add%28E%29) – Jayamohan

ответ

10

Вы не используете итератор правильно. Правильный способ использования итераторов пересекает список с самим итератором, а не по индексу.

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] 

    } 
} 
+0

У меня есть метод, подобный этому "public void addToList (String [] strings) {}", который принимает массив строк, и я хочу добавить эти строки в список, используя listIterator – AnkitSablok

+0

, тогда у вас нет «списка». у вас есть массив. Если вы все еще хотите использовать 'listIterator', вам нужно преобразовать этот массив в список с' Arrays.asList() ' – nachokk

+0

, но список, который я хочу добавить в список, - это другой список, чем массив , как это сделать? – AnkitSablok

1

Я не знаю, почему вы хотите вставить элементы ArraList по ListIterator. Вы можете просто сделать это 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); 
    } 
    } 
} 
Смежные вопросы