java - 为什么此代码会抛出 IndexOfOutBoundsException - 即 ensureCapacity() 是怎么回事?

标签 java arraylist

考虑以下两段代码:

int index = 676;
List<String> strings = new ArrayList<String>();
strings.add(index, "foo");

int index = 676;
List<String> strings = new ArrayList<String>();
strings.ensureCapacity(index);
strings.add(index, "foo");

在第一种情况下,我对看到 IndexOfOutBoundsException 并不感到惊讶。 According to the API , add(int index, E element)将抛出 IndexOfOutBoundsException “如果索引超出范围 (index < 0 || index > size()) ”。 strings的大小在添加任何元素之前为 0,因此索引肯定会大于 ArrayList 的大小。

但是,在第二种情况下,我希望调用 ensureCapacity成长strings这样调用 add将正确插入字符串 "foo"在索引 676 - 但它没有。

  1. 为什么不呢?

  2. 我应该怎么做才能add(index, "foo")适用于 index > strings.size() ?

最佳答案

ArrayList 中底层数组的容量不同于更高级别的 List API 方法(添加、删除等),并且仅与支持数组的大小有关。如果你想允许添加列表边界之外的元素,你需要在实用程序类中自己编写代码(或找到一个为你做这件事的集合),填充空值、空对象,或者你的应用程序在新的之间期望的任何东西索引和旧大小。

关于java - 为什么此代码会抛出 IndexOfOutBoundsException - 即 ensureCapacity() 是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1644741/

相关文章:

java - 在一台机器上出现堆栈溢出错误,但在同一代码上另一台机器却没有

java - 从不同类的 JFrame 中删除 JPanel(并添加一个新类)

java - 无法在 ArrayList 中找到符号

android:使用在 MainActivity 的 AsyncTask 中创建的 arrayadapter<Custom object>

java - 对采用列表作为参数的方法进行单元测试

java - 添加到完整 ArrayList 时如何确定 Big-O 中的程序复杂性?

java - java.util.HashMap 没有在 Kotlin 中实现 java.util.Map 吗?

java - 验证 selenium 中的动态页面

java - Servlet请求的异步响应查询

java - ArrayList toString() 方法