簡體   English   中英

如何將空對象添加到ArrayList內的ArrayList

[英]How do I add a null object to an ArrayList inside an ArrayList

我試圖使用鄰接矩陣結構來表示Ad Hoc網絡。 為此,我在另一個ArrayList中創建一個ArrayList。

當我向圖形中添加一個新頂點時,我創建了一個新的ArrayList(在一個超級ArrayList中)然后我有一個循環來為每個ArrayList添加一個新的null對象,但是ArrayLists的大小沒有正確增加我可以弄清楚原因。

這是我的代碼:

public class Matrix {

public ArrayList<ArrayList<Edge>> graph;
public ArrayList<Vertex> verticies;
public ArrayList<Edge> edges;

public Matrix() {
    graph = new ArrayList();
    verticies = new ArrayList();
    edges = new ArrayList();
}

public Matrix(ArrayList<Vertex> verticies, ArrayList<Edge> edges) {

    this.verticies = verticies;
    this.edges = edges;      
}

public void addVertex(Vertex v) {
    verticies.add(v);
    graph.add(new ArrayList());

    for(int i=0; i<graph.size()-1; i++ ) {
        graph.get(i).add(null);
    }
}

任何幫助將不勝感激。

的初始大小graph0 ,所以for在環addVertex()的運行速度比它應該少一個時間:

public void addVertex(Vertex v) {
    verticies.add(v);
    graph.add(new ArrayList()); // graph now has size 1

    for (int i = 0; i < graph.size() - 1; i++) { // i = 0, 0 < 0 is false       
        graph.get(i).add(null); // this is not executed for the last added list
    }
}

下次調用addVertex()它會將null添加到前一個ArrayList ,但不會添加到剛添加的那個。

所以你可能應該這樣做:

for (int i = 0; i < graph.size(); i++)

即使有了這個修復,但請注意,如果你調用addVertex() 5次,你會得到類似這樣的東西:

index             ArrayList
  0      [null, null, null, null, null]
  1      [null, null, null, null]
  2      [null, null, null]
  3      [null, null]
  4      [null]

這可能不是你想要的。 更好的方法是首先添加所有頂點

public void addVertex(Vertex v) {
    this.vertices.add(v);
}

然后為具有適當大小的鄰接矩陣創建ArrayList

public void initializeAdjacencyMatrix() {
    int n = this.vertices.size();
    for (int i = 0; i < n; i++) {
        List<Edge> edges = new ArrayList<>(Collections.nCopies(n, null));
        graph.add(edges);
    }
}

此外,在實例化ArrayList時使用的是原始類型。 這不是一個好習慣。 您應該使用鑽石運算符。 例如:

graph = new ArrayList<>();
graph.add(new ArrayList<>());

在這一行:

for(int i=0; i<graph.size()-1; i++ ) {

刪除-1 由於-1時的曲線圖的大小是一個i不會小於0,因此該循環不運行。 如果循環沒有運行,那么添加null值的代碼將無法運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM