繁体   English   中英

在java中创建邻接列表的最佳方法?

[英]Best Way to create Adjacency List in java?

一般来说,要在java中创建n个节点的邻接列表,我们需要创建一个额外的循环来用空列表填充列表,如下所示 -

for(int i=0;i<n;i++)
    adj.add(new ArrayList<>());

现在我们不得不添加元素,但由于这个额外的循环,它浪费了时间。 有没有其他最好的方法来创建邻接表??????

如果我需要对图进行紧凑的表示,并且可以按顺序获取每个顶点的邻居,我经常这样做:

//Concatenated adjacency lists for each vertex in order
ArrayList<Integer> adjList = new ArrayList<>();

//For each vertex, the end of its adjacency list in adjList
ArrayList<Integer> adjListEnds = new ArrayList<>();

for (int i=0; i<num_vertexes; ++i) {
    for (int adj : getNeighbors(i)) {
        adjList.add(adj);
    }
    adjListEnds.add(adjList.size());
}

现在,要获取任何顶点的邻居:

int s = vertex>0 ? adjListEnds.get(vertex-1) : 0;
int e = adjListEnds.get(vertex);
for (int i = s; i<e; ++i) {
    processNeighbor(vertext, adjList.get(i));
}

当然,如果你希望它非常紧凑,那么你应该使用类似数组列表的东西,它包含原始int s 而不是Integer s。 有时我自己卷。 有时我使用 gnu trove。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM