java arraylist EnsureCapacity 不起作用

2024-03-19

要么我做错了,要么我不明白这个方法是如何工作的。

ArrayList<String> a = new ArrayList<String>();
a.ensureCapacity(200);
a.add(190,"test");
System.out.println(a.get(190).toString());

我本以为 EnsureCapacity 会让我插入一条索引达到该值的记录。有其他方法可以做到这一点吗?

我在第三行收到 IndexOutOfBounds 错误。


No, ensureCapacity不会改变逻辑大小 of an ArrayList- 它改变了capacity,这是列表在下次需要复制值之前可以达到的大小。

您需要非常清楚逻辑大小(即范围内的所有值)之间的差异[0, size)可以访问,并且添加新元素会将其添加到索引处size)和容量实际上更多的是实现细节 - 它是用于存储的后备数组的大小。

Calling ensureCapacity应该只在性能方面产生任何差异(通过避免过度复制) - 如果您明白我的意思,它不会影响列表中内容的逻辑模型。

编辑:听起来你想要一种ensureSize()方法,可能看起来像这样:

public static void ensureSize(ArrayList<?> list, int size) {
    // Prevent excessive copying while we're adding
    list.ensureCapacity(size);
    while (list.size() < size) {
        list.add(null);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java arraylist EnsureCapacity 不起作用 的相关文章

随机推荐