arrayList / vector在位置,方法中添加元素

时间:2012-02-11 01:10:18

标签: java add

我正在尝试做类似的事情:

 ArrayList<String> al = new ArrayList(15);
 al.add(5, "test");

我的情况与矢量,但无关紧要。我错过了一些微不足道的事情。

但是我得到了索引超出范围的异常。

方法api描述:

“将指定的元素插入此列表中的指定位置。将当前位置的元素(如果有)和右侧的任何后续元素移位(将其添加到索引中)。” - so?

我的情况是我收到UDP数据包,并尝试根据标题序列号将数据放入结构中。

更新:与.set

相同

3 个答案:

答案 0 :(得分:3)

对于初学者来说,ArrayList的构造函数令人困惑。 把

 new ArrayList(15);

基本上只是对您的程序进行优化。类 ArrayList 基本上只是本机Java数组的包装器。在此示例中,将使用15个元素创建实际内部数组。当您放置更多内容时, ArrayList 类只会创建一个更大的数组并复制原始数组中的内容。提供初始容量通常没有意义。我只是在我从一开始就知道我会在ArrayList中讲述大量元素(比如一百万个)时才使用它。

我知道,这种行为非常令人困惑,特别是如果你来自像PHP这样的语言,你可以这样做:

al[] = Array();
al[15] = "I am a fifteen year old UDP package";

基本上add(index, element)方法只有在包含索引元素的ArrayList时才会起作用,在 index-1 之后压缩新元素。< / p>

对于解决方案:

如果您知道最多会收到15个元素,那么使用普通的数组就可以了:

String[] al = new String[15];
al[5] = "Tralala";

如果您不知道我将它们存储在列表中的元素数量,并在收到所有包裹后对该列表进行排序。

答案 1 :(得分:3)

构造函数接受容量,而不是大小。您只能在小于或等于ArrayList大小的索引处添加元素,在这种情况下为零。

以下是创建包含15个元素的ArrayList的解决方法:

ArrayList<String> al = new ArrayList<String>(Arrays.asList(new String[15]));

答案 2 :(得分:0)

ArrayList<String> a = new ArrayList<String>();
int size = a.size();
if(5 < size){
    a.add(5,"Hello");
}else{
    System.out.println("Index not present as size is less");
}

或者在创建集合时,您可以提及大小,如

ArrayList<String> a = new ArrayList<String>(10);