您可以通过执行设置ArrayList的初始大小
ArrayList<Integer> arr=new ArrayList<Integer>(10);
但是,你做不到
arr.add(5, 10);
因为它会导致越界异常。
如果您无法访问分配的空间,设置初始大小有什么用?
add函数定义为add(int index, Object element)
所以我没有添加到索引10。
您将数组列表的大小与其容量混淆:
当您调用new ArrayList<Integer>(10)
时,您正在设置列表的初始容量,而不是其大小。换句话说,当以这种方式构造时,数组列表的生命空白。
将十个元素添加到数组列表的一种方法是使用循环:
for (int i = 0; i < 10; i++) {
arr.add(0);
}
完成此操作后,您现在可以修改索引0..9处的元素。
现在,列表中没有元素,因此当它不存在时,您无法添加到列表的索引5。您将列表的容量与其当前大小混淆。
只需致电:
the disadvantage mentioned here
将Integer添加到ArrayList
虽然你的arraylist的容量为10,但真正的列表中没有元素。 add方法用于将元素插入到真实列表中。由于它没有元素,因此不能将元素插入索引5。
如果你想在你的List
上添加10个项目,你可以尝试:
0
如果您已经声明了一个数组大小变量,那么您将使用变量stream
而不是数字'10'
我遇到了类似的问题,只知道arrayList是List接口的可调整大小的数组实现,我也希望你可以添加元素到任何一点,但至少可以选择定义初始大小。无论如何,您可以先创建一个数组并将其转换为如下列表:
arr.add(10)
要么
ArrayList
ArrayList myList = new ArrayList(10);
for (int i = 0; i < 10; i++)
arr.add(i);
/ *声明arraylist的初始能力只不过是在内部节省转移时间;当我们在内部添加元素时,检查capasity以增加capasity,你可以将元素添加到0 index,然后是1,依此类推。 * /
我在size
上的两分钱。我觉得最好用
int index = 5;
int size = 10;
Integer[] array = new Integer[size];
array[index] = value;
...
List<Integer> list = Arrays.asList(array);
可以灵活地放置任何初始值。
如果您想要一个具有预定义大小的列表,您还可以使用:
List<Integer> arr = Arrays.asList(new Integer[10]);
如果你想使用Collections.fill(list,obj);为了用重复的对象填充列表,你也可以使用
ArrayList<Integer> arr=new ArrayList<Integer>(Collections.nCopies(10, 0));
该行将10次复制到您的ArrayList中
ArrayList
的容量与其大小不同。大小等于ArrayList
(以及任何其他List
实现)中包含的元素数量。
容量只是底层数组的长度,用于内部存储qazxsw poop的元素,并且总是大于或等于列表的大小。
在列表中调用ArrayList
时,set(index, element)
与列表元素的实际数量(= size)(在代码中为零,因此抛出index
)有关,而不是与数组长度(= capacity)(这是一个具体到AIOOBE
的实现细节)。
ArrayList
方法对于所有set
实现都是通用的,例如List
,它实际上不是由数组实现的,而是作为链接的条目链。
编辑:你实际上使用LinkedList
方法,而不是add(index, element)
,但原理在这里是相同的。
如果要添加带索引的元素,则可以改为使用数组。
set(index, element)
10是AL的初始容量,而不是大小(为0)。当你要拥有大量元素时,你应该提到一些高值的初始容量,因为它可以避免在你不断添加元素时扩展容量的开销。
我想你问题的确切答案是:
在ArrayList上设置初始大小会减少nr。内部存储器重新分配必须发生的时间。该列表由数组支持。如果指定初始容量为0,则在第一次插入元素时,必须调整内部数组的大小。如果您大致了解列表将包含多少元素,则设置初始容量将减少nr。使用列表时发生的内存重新分配。
这可能对某人有帮助 -
String [] test = new String[length];
test[0] = "add";
迟到了,但在Java 8之后,我个人发现以下方法使用ArrayList<Integer> integerArrayList = new ArrayList<>(Arrays.asList(new Integer[10]));
API更简洁,可以替代Stream
。
例如,
其中qazxsw poi是所需的qazxsw poi大小而没有qazxsw poi,Arrays.stream(new int[size]).boxed().collect(Collectors.toList())
中的所有元素都被初始化为size
。
(我做了一个快速搜索,并没有在任何答案中看到List
- 如果这个答案是多余的,我可以随时告诉我,我可以删除它)