[英]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);
}
}
任何幫助將不勝感激。
的初始大小graph
是0
,所以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.