这个问题在这里已经有答案了:
arraylist的初始大小(16个答案)
arraylist初始容量和indexoutofboundsexception[重复](3个答案)
23天前关门了。
ArrayList<String> Array=new ArrayList<>(5);
Array.add("Ten");
Array.add("Twenty");
Array.add(4,"Fifty");
Array.add("Thirty");
Array.add("Fourty");
System.out.println(Array);
我拿到钱了 IndexOutOfBoundsException
运行此代码时出现异常。有人能解释一下为什么我会犯这个错误吗?
6条答案
按热度按时间q5lcpyga1#
您正试图在索引4处添加“五十”,这是不可用的,因为此时arraylist的大小是2。
array.add(4,“五十”);在索引4处添加“五十”
t1rydlwq2#
你的问题是
Array.add(4,"Fifty")
现在你还没有索引4。vuktfyat3#
从
void java.util.ArrayList.add(int index, Object element)
方法声明:因此您不能添加到索引4,因为调用方法时没有索引
lndjwyie4#
我认为这是由于你对第一个论点的误解造成的
ArrayList
建造师。它不是您提供的初始大小,而是容量。这个
ArrayList
这个班既有规模也有容量。大小是列表中实际添加的元素数。然而,容量是内存的内部数组的大小ArrayList
存储实际元素的位置。如果添加了足够的元素,则通过将当前内部数组的所有元素复制到大小为当前数组两倍的新数组来增加容量。这样做是因为,否则每次添加元素时都必须展开内部数组。这将严重影响性能。单参数构造函数接受初始容量,而不是大小。通常不指定容量,因为容量被初始化为合理的默认值。然而,这个构造函数的存在主要是出于性能原因:如果已知元素的数量将变得非常大,则可以通过该构造函数设置容量,因此
ArrayList
不必多次调整大小。jtoj6r0c5#
您的代码声明了arraylist的容量,而不是它的实际大小。所以可以添加元素,但是添加到位置4失败,因为该位置还不存在。
您可以通过在添加元素时查看数组的大小来检查:
增加一个值会使数组的大小增加1。但是如果数组的大小只有2,那么如果尝试将值添加到位置4,则会出现错误。
根据您的最终目标,您可以添加几个空白值来初始化这些位置,然后添加到位置4:
然后您可以执行以下操作:
nbnkbykc6#
如果你查看这些文件,它清楚地提到:
throws:indexoutofboundsexception-如果索引超出范围(index<0 | | index>size())
在执行时,您的列表大小将是2和4>大小,即2。因此,将抛出此异常。
您也可以在stack overflow中查看相同的讨论。