假设我想宣布一个List of AbstractClass
,其每个元素必须是AbstractClass
的混合子元素,称为SubClass1
和SubClass2
(不是抽象的,顺便说说)。但我也希望它具有特定尺寸的。
所以我宣布
List <AbstractClass> list = new ArrayList <AbstractClass> (SIZE);
如果我使用
添加列表到列表list.add(new SubClass1());
list.add(new SubClass2());
是否会在数组末尾添加 或从index = 0 开始添加? 在第一种情况下,我是否必须手动添加带循环的元素,如下所示?
List <AbstractClass> list = new ArrayList <AbstractClass> (); //I've removed size
for(int i=0;i<SIZE;i++){
list.add(new SubClass1());
list.add(new SubClass2());
}
答案 0 :(得分:2)
它们是在数组的末尾添加还是从index = 0开始?
两者。 SIZE
构造函数的ArrayList
参数确定其初始容量,而不是其初始长度。构建此ArrayList
后,其容量为SIZE
,但大小为0
。第一个元素add
ed将是索引0
,第二个元素将是索引1
,依此类推。
如果您不提供初始容量,则会有默认的初始容量。
在第一种情况下,我是否必须手动添加带循环的元素,如下所示?
一般来说,没有方法调用必须在任何循环中。
答案 1 :(得分:1)
List接口不适用于固定大小的数组:此处已为answered。但是,您可以设置初始大小。
关于添加:来自官方Java 7 List docs:
此界面的用户可以精确控制列表中的位置 插入每个元素。
add(E e)
- 将指定的元素追加到此列表的结束。
add(int index, E element)
- 在此指定的指定索引中插入指定的元素 列表。
您可以使用addAll
添加多个元素。
答案 2 :(得分:1)
new ArrayList(SIZE)
不会将您的列表限制为SIZE
元素,而只是初始化其内部数组,负责存储长度等于SIZE
的元素。但这并不意味着稍后此列表将无法存储超过SIZE
个元素,因为它以后仍可以使用旧元素创建新的更大数组并在内部使用它。
换句话说,返回的列表仍然可以调整大小。它在启动时也是空(其size()
为0)因此add
没有理由开始在0
之外的其他索引上添加元素。