簡體   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