Java中的对象arraylist初始化

时间:2013-07-04 16:24:15

标签: java object arraylist

我有一个名为Carriage的对象。当我初始化它时,我必须向构造函数发送一些席位:

Carriage newCarriage = new Carriage(30); //30=num of seats

现在我创建了一个名为Train的新类,这是它的构造函数:

public class Train {
    ArrayList<Carriage> trainCarriageList;

    Train(int baseTrainSize,int baseCarriageSize){
        trainCarriageList= new ArrayList<Carriage>(baseTrainSize);
    }
}

现在的问题是:我如何正确地启动大小为“baseTrainSize”的火车arraylist和每个大小为baseCarriageSize的Carriage

5 个答案:

答案 0 :(得分:3)

当您将大小(x)传递给ArrayList的构造函数时,不要使用x个新元素对其进行初始化,您只需使用0个元素对其进行初始化。容量是x。 ArrayList的内部实现是一个常规数组,以 x 的大小开头。填充数组时,数组列表初始化一个大小为2x的新数组,并将大小为x的数组复制到该数组。这是一个代价高昂的步骤。通过声明大小,如果您确切知道ArrayList中将包含多少元素,则可以省略此步骤。

答案 1 :(得分:1)

您可以使用循环。但从逻辑上讲,只是循环添加所有使用相同值初始化的元素对我来说没有意义。而是添加一个构造函数以获得默认值,无论您需要什么。虽然如果你真的需要这样做,那么做这样的事情:

for(int i=0 ; i < baseTrainSize; i++) {
Carriage carriage = new Carriage(30);
trainCarriageList.add(carriage);
}

答案 2 :(得分:0)

ArrayList<Carriage>不包含任何Carriage,直到您不将它们添加到集合中。

这意味着您不应该关心初始化Carriage在为您初始化容器时所拥有的座位数,而只是在您初始化它们时。

trainCarriageList = new ArrayList<Carriage>(baseTrainSize);
...
Carriage carriage = new Carriage(30);
trainCarriageList.add(carriage);

答案 3 :(得分:0)

您可以Class Train实施List。这样,您的火车对象就会成为Carriage的列表。

答案 4 :(得分:0)

使用此:

public class Train {
  ArrayList<Carriage> trainCarriageList;

  Train(int baseTrainSize,int baseCarriageSize){
    // initialize the List with the base size:
    trainCarriageList= new ArrayList<Carriage>(baseTrainSize);
    // initialize each list element with it's own base size:
    for(int i=0;i<baseTrainSize;i++){
      trainCarriageList.set(i, new Carriage(baseCarriageSize));
    }
  }
}