[英]Object arraylist initialization in Java
我有一个名为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”的火车数组列表以及每个大小为baseCarriageSize的Carriage
?
当您将大小(x)传递给ArrayList
的构造函数时, 请勿使用x个新元素对其进行初始化,而应使用完全0个元素对其进行初始化。 容量为x。 ArrayList
的内部实现是一个常规数组,其大小为x 。 填充数组后,数组列表将初始化一个2x大小的新数组,并将x大小的数组复制到其中。 这是一个昂贵的步骤。 通过声明大小,如果您确切知道ArrayList
中将包含多少个元素,则ArrayList
此步骤。
您可以为此使用循环。 但是从逻辑上讲,仅循环添加所有用相同值初始化的元素对我来说是没有意义的。 而是根据需要添加一个构造函数以使用默认值。 尽管如果您确实需要这样做,请执行以下操作:
for(int i=0 ; i < baseTrainSize; i++) {
Carriage carriage = new Carriage(30);
trainCarriageList.add(carriage);
}
ArrayList<Carriage>
在您不将其添加到集合之前不包含任何Carriage
。
这意味着在为容器初始化容器时,您不必在意初始化托架有多少个座位。
trainCarriageList = new ArrayList<Carriage>(baseTrainSize);
...
Carriage carriage = new Carriage(30);
trainCarriageList.add(carriage);
您可以使用Class Train
工具清单。 这样,您的火车对象实际上就是Carriage
的列表。
用这个:
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));
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.