我想在数组列表的特定位置添加一个元素为此我试图初始化具有初始容量的数组列表。
import java.util.ArrayList;
public class AddInArrayList{
public static void main(String[] args) {
ArrayList list = new ArrayList(4);
Object obj1 = new Object();
list.add(1, obj1);
}
}
输出
线程中的异常" main" java.lang.IndexOutOfBoundsException:
指数:1,大小:0 at java.util.ArrayList.add(ArrayList.java:359) 在AddInArrayList.main(AddInArrayList.java:7)
有没有办法按特定索引位置添加元素?
答案 0 :(得分:2)
您对 capacity 的含义感到困惑:传递给构造函数的数字不设置初始列表 size
您无法在空列表的索引1处插入元素,因为列表槽不能为空。如果您想要在插入大于其长度的索引之前扩展列表的函数,可以使用:
static void addAtPos(List list, int index, Object o) {
while (list.size() < index) {
list.add(null);
}
list.add(index, o);
}
也就是说,ArrayList
s基于阵列,这些阵列在插入中期表现不佳。因此,不同的数据结构几乎肯定会更适合您的问题,但您必须告诉我们您要实现的目标。
答案 1 :(得分:0)
Arrays不允许您在大于array.size的索引处执行插入。
因此,如果您想将每个项目与数字/索引相关联,最好使用地图。
Map map = new HashMap<Integer, Object>();
Object obj1 = new Object();
map.put(1, obj1);
答案 2 :(得分:0)
您获得IndexOutOfBoundsException
因为当您致电add(index, value)
时,该值必须不小于0且不大于list.size()-1
。在您的情况下,它应该是add(0, obj1)
。
答案 3 :(得分:0)
初始容量仅用于设置初始&#34;缓冲区&#34;底层数组的大小。所以在调用new ArrayList(4)
之后,你的列表仍然是空的。
如果您知道列表将包含大约10_000个元素,请创建具有初始容量c = 10_000 + x
的ArrayList实例。通过这种方式,您将避免昂贵的ArrayList#grow(newcapacity)
(Java 8)调用。
方法ArrayList#add(position, element)
也可以称为ArrayList#addAndMoveOtherToTheRight(position, element)