Java中的对象arraylist初始化

Java中的对象arraylist初始化,java,object,arraylist,Java,Object,Arraylist,我有一个名为carries的对象。当我初始化它时,我必须向构造函数发送一些席位: Carriage newCarriage = new Carriage(30); //30=num of seats public class Train { ArrayList<Carriage> trainCarriageList; Train(int baseTrainSize,int baseCarriageSize){ trainCarriageList=

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

Carriage newCarriage = new Carriage(30); //30=num of seats
public class Train {
    ArrayList<Carriage> trainCarriageList;

    Train(int baseTrainSize,int baseCarriageSize){
        trainCarriageList= new ArrayList<Carriage>(baseTrainSize);
    }
}
现在我创建了一个名为
Train
的新类,这是它的构造函数:

Carriage newCarriage = new Carriage(30); //30=num of seats
public class Train {
    ArrayList<Carriage> trainCarriageList;

    Train(int baseTrainSize,int baseCarriageSize){
        trainCarriageList= new ArrayList<Carriage>(baseTrainSize);
    }
}
公车{
ArrayList列车列表;
列车(内部基本列车尺寸,内部基本车厢尺寸){
列车车厢列表=新的阵列列表(基本列车尺寸);
}
}

现在的问题是:如何启动一个大小为“baseTrainSize”的train arraylist,以及每个
车厢的大小是否正确。但从逻辑上讲,仅仅循环添加所有初始化为相同值的元素对我来说没有意义。而是多添加一个构造函数以获得默认值,不管您需要什么。尽管如果你真的需要这样做,那么做如下:

for(int i=0 ; i < baseTrainSize; i++) {
Carriage carriage = new Carriage(30);
trainCarriageList.add(carriage);
}
for(int i=0;i
除非您将
阵列列表
添加到集合中,否则该列表不包含任何
托架

这意味着,当您为车厢初始化集装箱时,您不应该关心初始化车厢有多少个座位,而应该只关心初始化它们时

trainCarriageList = new ArrayList<Carriage>(baseTrainSize);
...
Carriage carriage = new Carriage(30);
trainCarriageList.add(carriage);
traincareinlist=新的数组列表(baseTrainSize);
...
车厢=新车厢(30);
列车车厢列表。添加(车厢);

当您将大小(x)传递给
数组列表的构造函数时
如果您不使用x个新元素对其进行初始化,则只使用0个元素对其进行初始化。容量是x。
ArrayList
的内部实现是一个以sizex开头的常规数组。填充数组后,数组列表将初始化一个大小为2x的新数组,并将大小为x的数组复制到该数组中。这是一个代价高昂的步骤。通过声明大小,如果您确切知道
ArrayList
中有多少个元素,您可以不必执行此步骤,因为您可以拥有
类Train
工具列表。这样,您的train对象实际上就是一个
车厢的列表。

使用以下方法:

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));
    }
  }
}
公车{
ArrayList列车列表;
列车(内部基本列车尺寸,内部基本车厢尺寸){
//使用基本大小初始化列表:
列车车厢列表=新的阵列列表(基本列车尺寸);
//使用每个列表元素自己的基本大小初始化每个列表元素:

对于(int i=0;i您尝试过什么?您需要用
carries
的实例填充
traincarrielist
。您不能用特定的大小初始化arraylist。它将添加您想要的任何对象。
List trainList=new arraylist(baseTrainSize)
@BhushanKawadkar当然可以。这是构造函数的目的,请参阅文档。@luigimendoza这将使用与
Train
相同的实例填充列表(称为
carrie
顺便说一句),这不是期望的结果。环路上限应为
基本车厢尺寸
,而不是
基本车厢尺寸
。第2行应为
新车厢(基本车厢尺寸)
,而不是
新车厢(30)
。但是要在构造函数中实现它呢?我是说火车构造函数,这意味着他必须实现
列表
接口声明的所有方法。全部25种方法。在这种情况下,聚合显然比继承更有用。谢谢,但是座位大小呢,我必须初始化它,因为我创建了一个设置座位大小请再次阅读我的答案。您的问题是不了解如何使用
ArrayList
Works接受此答案,然后使用左侧的复选框。