要么我做错了,要么我不明白这个方法是如何工作的。
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(使用前将#替换为@)