如何将空对象添加到ArrayList

时间:2015-04-22 23:43:12

标签: java arraylist graph

我正在尝试使用邻接矩阵结构来表示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);
    }
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

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()

即使使用此修复程序,请注意,如果您拨打index ArrayList 0 [null, null, null, null, null] 1 [null, null, null, null] 2 [null, null, null] 3 [null, null] 4 [null] 5次,您将会遇到以下情况:

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); } } s:

ArrayList

此外,您在实例化graph = new ArrayList<>(); graph.add(new ArrayList<>()); 时使用原始类型。这不是一个好习惯。您应该使用钻石运算符。例如:

{{1}}

答案 1 :(得分:0)

在这一行:

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

删除-1。由于-1在图形的大小为1时i不会小于0,因此循环不会运行。如果循环没有运行,那么添加null值的代码将无法运行。