我正在尝试做类似的事情:
ArrayList<String> al = new ArrayList(15);
al.add(5, "test");
我的情况与矢量,但无关紧要。我错过了一些微不足道的事情。
但是我得到了索引超出范围的异常。
方法api描述:
“将指定的元素插入此列表中的指定位置。将当前位置的元素(如果有)和右侧的任何后续元素移位(将其添加到索引中)。” - so?
我的情况是我收到UDP数据包,并尝试根据标题序列号将数据放入结构中。
更新:与.set
相同答案 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);