当前位置: 首页 > 面试题库 >

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

巫马炫明
2023-03-14
问题内容

当我做

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的大小,然后像数组一样立即使用索引?


问题答案:

这是来源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));
    }
}

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



 类似资料:
  • null 我也尝试了一些反匹配,但它不仅不起作用,它也感觉非常非常脏(整个项目可能不是最优的,所以这是说了很多)。 注意:您可以在评论中建议实现这一点的更好方法。请记住,虽然我总是开放的改进建议,这不是我的问题。

  • 当你首次建立一个应用的时候,为你的数据库预先安装一些硬编码的数据,是很有用处的。 有几种方法可以让Django自动创建这些数据:你可以通过fixtures提供初始数据,或者提供一个包含初始数据的sql文件。 通常来讲,使用fixtrue更加简洁,因为它是数据库无关的,而使用sql初始化更加灵活。 提供初始数据的fixtures fixture是数据的集合,让Django了解如何导入到数据库中。创建

  • 我感兴趣的是另一个。它是一个代理,将所有调用重定向到第一个调用。因此,当我调用http://localhost:8080/foo时,我的代理服务器将依次调用http://localhost:8090/foo。如果第一个服务器返回,代理将返回。 我设法用一些可能不优雅但功能正常的代码来达到这一点,下面我给出了摘录。这里的关键是我使用来实现这一点。下一步是设计一个界面,将使我的附加信息立即清晰,这基本

  • 我想使用nss作为pkcs11的提供者,我正在oracle JRE和ubuntu 64位上用java编码。我尝试了两种不同的包装,iaik和SunPKCS11,但在这两种包装中我遇到了相同的问题。对于我的提供者,我首先尝试使用libnss3。所以每次我在实例模块中得到IOException。然后我使用libsoftokn3。因此,我成功地实例化了一个模块。但现在我在初始化时遇到了这个异常:“CKR

  • 我正在尝试使用Firebase存储下载图像。我编写了以下代码 MainActivity.java 我在这个论坛上搜索,但没有得到什么是确切的问题。请帮忙。日志行:

  • 我想为文本字段提供一个初始值,并用空值重新绘制它以清除文本。使用Flutter的API执行此操作的最佳方法是什么?