我有一个名为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
?
答案 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));
}
}
}