繁体   English   中英

Java中的对象arraylist初始化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM