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

Java arrayList/vector在位置添加元素,方法,java,add,Java,Add,我正在尝试做一些类似的事情: ArrayList<String> al = new ArrayList(15); al.add(5, "test"); ArrayList al=新的ArrayList(15); al.添加(5,“测试”); 我的情况与向量有关,但这无关紧要。我错过了一些琐碎的事情 然而,我得到了索引越界异常 方法api说明: “在此列表中的指定位置插入指定元素。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将一个元素添加到其索引)。”-那么 我的情

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

 ArrayList<String> al = new ArrayList(15);
 al.add(5, "test");
ArrayList al=新的ArrayList(15);
al.添加(5,“测试”);
我的情况与向量有关,但这无关紧要。我错过了一些琐碎的事情

然而,我得到了索引越界异常

方法api说明:

“在此列表中的指定位置插入指定元素。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将一个元素添加到其索引)。”-那么

我的情况是,我获取UDP数据包,并尝试根据报头序列号将它们的数据放入结构中


更新:同样的情况也发生在.set上。对于初学者来说,ArrayList的构造函数令人困惑。 放置

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

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

al[] = Array();
al[15] = "I am a fifteen year old UDP package";
基本上,
add(index,element)
方法只适用于包含多个索引元素的ArrayList,将新元素压缩到index-1之后

对于解决方案:

如果您知道最多将接收15个元素,则可以使用普通的数组,如下所示:

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

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

构造函数接受容量,而不是大小。只能在小于或等于ArrayList大小的索引处添加元素,在本例中为零

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

ArrayList<String> al = new ArrayList<String>(Arrays.asList(new String[15]));
ArrayList al=新的ArrayList(Arrays.asList(新字符串[15]);
ArrayList a=新的ArrayList();
int size=a.size();
如果(5<尺寸){
a、 添加(5,“你好”);
}否则{
System.out.println(“由于尺寸较小,索引不存在”);
}
或者在创建集合时,您可以提及大小,如

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

你能解释一下你的行为吗?你的问题很难理解。“我的例子是vector,但这无关紧要。我遗漏了一些琐碎的东西。”因为vector.add和.set方法与arrayList具有相同的行为。不管怎样,我还是得到了预期的答案。正如@mark byers在回答中所说,ArrayList仍然必须是连续的。谢谢,很不幸,他删除了他的答案,因为他对我的回答感到不安,尽管我建议将其从评论转移到回答。不管怎样,我明白了。哦,是的,它消失了。当我不知道会有多少元素时,@markbyers建议的分类列表也是我的选择。另外:对有用的答案投反对票是不好的…:)@allesblinkt:我知道这并不优雅,但这是我所知道的唯一一种不带循环(也不是那么优雅)制作一定大小的ArrayList的方法。我知道你知道。我真的很想自己回答这样的问题。
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);