插入java.util.List中的任何位置

fis*_*ben 22 java list indexoutofboundsexception

根据文档,您可以在List中的任何位置插入对象:

该接口的用户可以精确控制列表中每个元素的插入位置.

(来源:http://download.oracle.com/javase/6/docs/api/java/util/List.html)

但是以下程序因IndexOutOfBoundsException而失败:

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<String> myList = new ArrayList<String>();
        myList.add(0, "derp");
        myList.add(2, "herp");

        for (String s : myList) {
            System.out.println("Le string: " + s);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它也没有明确地设置初始容量(这是有道理的,因为默认值是10).

为什么我不能在任何位置插入对象,只要它的索引低于容量?尺寸是否始终等于插入元素的数量?

Jon*_*eet 28

您可以在任何有效位置插入对象.仔细看看Javadoc add(int, E):

抛出:
IndexOutOfBoundsException - 如果索引超出范围(index < 0 || index > size())

换句话说,在插入的元素总是增加名单由1的大小可以在任意一端插入,或者在中间......但你不能插入过去的结束.

容量ArrayList有效是一个实现细节-它控制时背衬阵列需要通过较大的一个,以应付多种元素来代替.列表的大小在这里是重要的部分 - 容量为100但是大小为5的列表仍然只是5个元素的列表,因此将位置67插入到这样的列表中是没有意义的.

  • @fiskeben:这不是蹩脚的 - 如果你想要一个任意的键/值映射,请使用`Map`代替.如果你想拥有一个有序列表,你需要明确地填充所有元素,而不是随意地注入它们而不是列表的实际大小的概念. (7认同)