gpt4 book ai didi

java - 为什么即使提供了初始容量,我们也不能在将元素添加到第 (n-1) 个索引之前将元素添加到列表中的第 n 个索引

转载 作者:行者123 更新时间:2023-12-01 06:42:16 24 4
gpt4 key购买 nike

假设我声明一个大小为 10 的 int 数组,我可以向其第四个索引添加一个元素,我可以毫无异常地运行代码。

int[] ar = new int[10];
ar[4] = 8;
System.out.println(Arrays.toString(ar)); //works fine

这是因为当我说大小为 10 时,将为该数组分配那么多内存空间,并在每个索引中保留其类型的初始值。

但是List中的情况不一样。假设我声明一个初始容量为 10 的列表,并尝试将一个元素添加到它给出的第四个索引

java.lang.IndexOutOfBoundsException: Index: 4, Size: 0

List<Integer> list = new ArrayList<Integer>(10);
list.add(4, 8); //exception

当然,即使给出了初始容量,列表的大小也会返回0。为什么它不像Array,我认为没有为列表的10个元素分配内存?

我猜测一旦像数组一样给出了容量,有没有办法用默认值填充列表。

最佳答案

这就是JavaDoc for ArrayList 说的是 add(int index, E element):

throws IndexOutOfBoundsException - if the index is out of range (index < 0 || index > size())

大小是当前存储的元素数量,而不是当前容量

事实上,您的汽车有“能力”以 100 英里/小时的速度行驶,但这并不意味着您可以在 1 秒内神奇地从 0 英里/小时加速到 90 英里/小时;-)

换句话来说:答案是尺寸和容量不一样。容量仅仅意味着:“这是在底层数组需要增长之前该列表可以增长到的大小”。

关于java - 为什么即使提供了初始容量,我们也不能在将元素添加到第 (n-1) 个索引之前将元素添加到列表中的第 n 个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54807578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com