关于在Java中声明新列表

时间:2015-05-22 18:24:37

标签: java list arraylist constructor

假设我想宣布一个List of AbstractClass,其每个元素必须是AbstractClass的混合子元素,称为SubClass1SubClass2(不是抽象的,顺便说说)。但我也希望它具有特定尺寸的

所以我宣布

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());
}

3 个答案:

答案 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之外的其他索引上添加元素。

相关问题