【发布时间】:2012-02-12 09:11:14
【问题描述】:
您可以通过以下方式设置 ArrayList 的初始大小
ArrayList<Integer> arr=new ArrayList<Integer>(10);
但是,你不能这样做
arr.add(5, 10);
因为它会导致越界异常。
如果无法访问分配的空间,设置初始大小有什么用?
添加函数定义为add(int index, Object element),所以我没有添加到索引10。
【问题讨论】:
-
实际上,从文档中可以看出,列表至少需要添加 n 个项目才能
set/additem n-1. -
感知:不知道是不是很明显,但是指定了。必须仔细阅读 JavaDoc。抛出:IndexOutOfBoundsException - 如果索引超出范围 (index = size())。
-
嗯,构造函数说“构造一个具有指定初始容量的空列表。”,采用空列表的概念,不能有索引 5。但我同意这可能不可见乍一看……
-
我认为公平地说,如果您将数组初始化为特定值,您将假设低于该值的索引可用——这是
ArrayList。我个人想要一种方法,可以让我设置一个大小,这样我就可以把东西放在特定的索引处。这种方法似乎明显不存在。 -
什么 numbskull 以这种方式设计了这些系列?!这会强制对具有可变长度元素的结构的并行实例化进行冗余工作(即 ArrayList
,其中每个数组可以具有不同的长度)。如果内存已经分配,因此在添加 N 个元素后不需要重新分配列表,那么这些索引应该从一开始就可以直接访问。在 C/C++、C#、Objective C 和 Swift 之后,Oracle 没有人学习过这种模式吗?!
标签: java arraylist indexoutofboundsexception