Aru*_*ran 0 java arrays list indexoutofboundsexception
假设我声明了一个int大小为10 的数组,我可以在其第四个索引中添加一个元素,我可以毫无例外地运行代码.
int[] ar = new int[10];
ar[4] = 8;
System.out.println(Arrays.toString(ar)); //works fine
Run Code Online (Sandbox Code Playgroud)
那是因为当我说大小为10时,将为该数组分配那么多的内存空间,其类型的初始值保存在每个索引中.
但案件并不相同List.假设我声明了一个初始容量为10的列表,并尝试将一个元素添加到它给出的第四个索引中
java.lang.IndexOutOfBoundsException:索引:4,大小:0
List<Integer> list = new ArrayList<Integer>(10);
list.add(4, 8); //exception
Run Code Online (Sandbox Code Playgroud)
当然,0即使给出了初始容量,列表的大小也会返回.为什么它不像Array,我认为没有为列表的10个元素分配内存?
我猜测,一旦像数组一样给出容量,有没有办法用List填充默认值.
这就是ArrayD的JavaDoc所说的add(int index, E element):
抛出IndexOutOfBoundsException - 如果索引超出范围(索引<0 || index> size())
的大小是当前存储元件的数量,而不是当前容量.
事实上你的汽车有"容量"以100英里/小时的速度行驶,这并不意味着你可以在1秒内神奇地从0加速到90英里/小时;-)
换句话说:答案是尺寸和容量不一样.容量仅仅意味着:"这是这个列表在底层数组需要增长之前可以增长的大小".
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |