-1

我有一个名为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”且每个Carriage大小为 baseCarriageSize 的火车数组列表?

4

5 回答 5

3

当您将大小 (x) 传递给您的构造函数时,ArrayList不会使用 x 个新元素对其进行初始化,而是使用 0 个元素对其进行初始化。容量为 x。的内部实现是一个以大小xArrayList开头的常规数组。当数组被填满时,数组列表初始化一个大小为 2x 的新数组,并将大小为 x 的数组复制到它。这是一个代价高昂的步骤。通过声明大小,如果您确切知道.ArrayList

于 2013-07-04T16:29:32.820 回答
1

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

for(int i=0 ; i < baseTrainSize; i++) {
Carriage carriage = new Carriage(30);
trainCarriageList.add(carriage);
}
于 2013-07-04T16:27:16.983 回答
0

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

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

trainCarriageList = new ArrayList<Carriage>(baseTrainSize);
...
Carriage carriage = new Carriage(30);
trainCarriageList.add(carriage);
于 2013-07-04T16:27:29.150 回答
0

你可以Class Train实现 List。这样,您的 train 对象实际上就是一个Carriages 列表。

于 2013-07-04T16:34:17.527 回答
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));
    }
  }
}
于 2013-07-04T16:40:14.407 回答