java - 使用Arraylist实现Adjacency列表

时间:2015-02-07 14:47:57

标签: java arraylist nested

这就是我所拥有的:

class Node {

    Integer value;
    ArrayList<Integer> adjList;

    public Node(Integer val, ArrayList<Integer> l) {
        value = val;
        Collections.sort(l);
        adjList = l;
    }
}

这就是我想要的:

class Node {

    Integer value;
    ArrayList<Node> adjList;

    public Node(Integer val, ArrayList<Integer> l) {
        value = val;
        Collections.sort(l,/*some comparator*/);
        adjList = l;
    }
}

所以我可以这样做:

private void process(){
    Random r = new Random(System.currentTimeMillis());
    while(vertices.size() > 2){
        Node v1 = vertices.get(r.nextInt(vertices.size()));
        Node v2 = v1.adjList.get(r.nextInt(v1.adjList.size()));
        contract(v1,v2); // Randomized contraction algorithm aka Karger's Min Cut algorithm
    }
}

但是这里有什么烦我:

如果我将邻接列表声明为类型ArrayList<Node>,那么此列表的每个元素都会存储指针或保留节点的整个副本(从而将一个arraylist嵌套在另一个...到无穷大! )?

我希望它存储为指针。该怎么办?

1 个答案:

答案 0 :(得分:2)

与C(++)不同,Java 总是使用对象的指针。这意味着列表将仅存储这些引用。

然后,节点中的列表还将存储对其他列表的引用,但每个列表仅在内存中存在一次。