2013-04-14 5 views
0
import java.util.ArrayList; 

public class ArrayTest { 

    private static ArrayList<String> list = new ArrayList<String>(); 


    public static void printList() { 
     System.out.println("Printing the list"); 
     for (int i = 0; i < list.size(); i++) 
     { 
      if (list.get(i) != null) 
       System.out.println(i + " => " + list.get(i)); 
     } 
    } 

    public static void add(Integer index, String val) { 
     while(list.size() <= index) 
      list.add(null); 
     list.add(index, val); 
    } 

    public static void main(String[] args) { 
     ArrayTest.add(8, "cover"); 
     ArrayTest.printList(); 
     ArrayTest.add(6, "and"); 
     ArrayTest.printList(); 
    } 

} 

производит следующий выводДобавление элементов в ArrayList в Java

Printing the list 
8 => cover 
Printing the list 
6 => and 
9 => cover 

add(Integer index, String val) функция добавляет соответствующее количество нулей в список в качестве проверки, чтобы избежать каких-либо исключений IndexOutOfBoundsException. Может кто-нибудь объяснить, почему добавление «и» в список «закрывает» позицию дальше в списке?

+0

Прочитайте [документацию] (http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html), ArrayList.add (int, element) * вставляет * элемент при определенном индексе, смещение последующих элементов обратно. ArrayList.set (int, element) * устанавливает * элемент в индексе без сдвига. –

ответ

2

Поскольку это actual specification метода List.add(int index, E element):

Вставки указанный элемент в указанной позиции в этом списке (дополнительная работа). Сдвигает элемент в данный момент (если есть) и любые последующие элементы справа (добавляет один к своим индексам).

Что касается «почему»: это делается для того, чтобы избежать перезаписи элемента в указанном положении.

3

Потому что add method вы использовали вставки элемент по указанному индексу. Он не заменяет существующий элемент в этом положении, он добавляет новый, поэтому добавьте позицию индекса от этого к концу.

Если вам нужно заменить значение, используйте set method.

Смежные вопросы