Java ArrayList IndexOutOfBoundsException尽管提供了初始容量

问题描述

这是来源ArrayList

构造函数

public ArrayList(int initialCapacity) 
{
     super();

     if (initialCapacity < 0)
          throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
     this.elementData = new Object[initialCapacity];
}

您致电set(int, E)

public E set(int index, E element) 
{
     rangeCheck(index);  
     E oldValue = elementData(index);
     elementData[index] = element;
     return oldValue;
}

Set电话rangeCheck(int)

private void rangeCheck(int index) 
{
    if (index >= size) {
         throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }
}

它可能很微妙,但是当您调用构造函数时,尽管初始化了anObject[],但您并未初始化size。因此,从中rangeCheck,您会得到IndexOutOfBoundsException,因为它size是0。因此set(int, E),您可以使用add(E e)(在您的情况下,将e类型添加E到列表的末尾)来代替使用,add(1)而这不会发生。或者,如果适合您,则可以按照另一个答案中的建议将所有元素初始化为0。

解决方法

当我做

ArrayList<Integer> arr = new ArrayList<Integer>(10);
arr.set(0,1);

Java给了我

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0,Size: 0
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.set(Unknown Source)
    at HelloWorld.main(HelloWorld.java:13)

有没有一种简单的方法可以预先保留ArrayList的大小,然后像数组一样立即使用索引?

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”