是否有确定的顺序遍历番石榴图的方法?
我尝试通过此测试来做到这一点:
import com.google.common.graph.ElementOrder;
import com.google.common.graph.Graph;
import com.google.common.graph.GraphBuilder;
import com.google.common.graph.Traverser;
import java.util.Random;
public class TestGraph {
private static final Random random = new Random();
static class Node { //Node class with volatile hashcode
private final int hashcode = random.nextInt();
private final String name;
public Node(String name) {this.name = name; }
@Override public String toString() {return name; }
@Override public int hashCode() {return hashcode;}
}
public static void main(String argv[]) {
Node root = new Node("root");
Graph<Node> graph = GraphBuilder.directed()
.nodeOrder(ElementOrder.insertion())
.<Node>immutable()
.putEdge(root, new Node("one"))
.putEdge(root, new Node("two"))
.putEdge(root, new Node("three"))
.build();
//Print the nodes in traversal order.
Traverser.forGraph(graph).depthFirstPostOrder(root)
.forEach(x->System.out.println(x));
}
}
每次评估的顺序都不同。我认为根本原因是图的后继者没有排序。
答案 0 :(得分:2)
您可以在以下地方看到有关此主题的一些讨论,以及获取所需内容的技巧:https://github.com/google/guava/issues/2650
也就是说,我们最近一直在研究提供此功能的替代方法,并且在即将发布的Guava版本中似乎很有可能。不过,这可能会带来一些额外的内存开销(10-20%)。
如果我们确实提供了此功能,几乎可以肯定会通过Dialog
将其指定为图的属性。