[英]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.