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

}

产生以下输出

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

add(Integer index, String val)函数将适当数量的空值添加到列表中作为检查以避免任何IndexOutOfBoundsException异常。有人可以解释为什么在列表中添加“和”会推动“覆盖”列表中的位置吗?

4

3 回答 3

3

因为您使用的add 方法在指定索引处插入一个元素。它不会替换该位置的现有元素,而是添加一个新元素,因此将索引位置从该位置添加到末尾。

如果需要替换值,请使用set 方法

于 2013-04-14T18:15:08.013 回答
2

因为这是该方法的实际规范List.add(int index, E element)

在此列表中的指定位置插入指定元素(可选操作)。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将其索引加一)。

至于“为什么”:这样做是为了避免覆盖指定位置的元素。

于 2013-04-14T18:16:12.130 回答
0

在 Java 9 中,有一种简单的方法,行数更少,无需初始化或add方法。使用collection factory方法:

List<String> list = List.of("first", "second", "third");
于 2018-04-10T09:06:57.437 回答