[英]ArrayList out of bounds exception
我有以下代码:
ArrayList<Integer> arr = new ArrayList<Integer>(10);
arr.set(0,5);
我得到一个索引越界错误,我不知道为什么。 我已声明大小为 10 的ArrayList
。为什么会出现此错误?
您声明了一个ArrayList
,其初始容量为 10 个元素,但您没有向此列表添加元素,即列表为空。 set
将替换现有元素,但由于列表中没有元素,因此抛出异常。 您必须在使用add
方法之前添加元素。
Initial capacity
是指列表内部维护的数组一开始大小为10。 在向列表中添加更多元素时,此内部数组的大小可能会发生变化。
查看ArrayList.set(int, E)
JDK 源代码给出了一个提示:在调用set(N-1, E)
之前,您的列表中至少需要有N
元素。
通过add()
方法添加元素。
包含的初始数组指定为“10”,数组中的实际项目数为 0。
要在第一个索引处添加“5”,只需执行 arr.add(5)
传递给 ArrayList 构造函数的值是数组后备存储的初始容量。 当您向超出此容量的点添加元素时,ArrayList 将在内部分配一个新的存储数组,并将项目复制到新的后备存储数组。
您在构造函数中传递的只是支持列表的数组的初始容量。 该列表在构建后仍然是空的。 此外,如果您想存储即仅整数,您应该考虑使用通用列表。
您已经使用项目数0
初始化了 arraylist,这意味着您在该数组中只有1
元素。 然后你在这个数组中添加两个数字。
使用arr.add(0.5)
。 set
方法将替换现有元素。
set(int index, E element) 用指定的元素替换此列表中指定位置的元素。 你应该使用 add()
在构造函数中,您已指定初始容量。 但是,列表的大小仍然是 0,因为您还没有添加任何元素。
从ArrayList.set()
的文档中:
IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index >= size())。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.