java - 使用 LinkedList 与 HashMap 实现无向图有什么区别?遍历BFS/DFS哪个更好?

标签 java graph hashmap traversal

我遇到过两种无向图(邻接表)的实现,但我不知道为什么要使用其中一种而不是另一种。

我成功地使用 LinkedList 实现了 DFS/BFS,但无法让 DFS 与 HashMap 一起使用。

使用HashMap,我知道插入的顺序不被维护,这是否意味着你不能像DFS那样进行任何遍历?如果是这样,这是否违背了使用 HashTable 的目的,因为那么在没有插入顺序的情况下如何正确遍历?

如何检查 HashMap 中的节点是否被访问?目前,我已经创建了一个新类 Node,它具有已访问属性。通过 LinkedList 实现,我不需要一个新类,所以我直接使用 <T> 类型的变量。 。必须创建一个新类会影响使用图的整体效率吗?

最佳答案

HashMap 是 Collection 的子接口(interface),每个集合都提供方法 iterator()这将允许您遍历集合并访问其中的每个元素。

理论上,邻接表是 Set ,而不是 List ,因为该集合不应包含每条边的多个副本。这也意味着顺序并不重要。

HashMap使用 HashSet因为它的按键组非常理想。然后,您可以使用代表每个键的一对的对象,例如 Pair<String, String> ,或者您可以只使用格式为 "A,B" 的字符串其中 A 和 B 是顶点的名称。

如果您可以使用提供的类,那么最好这样做比创建自己的类更好。 JRE 中提供的库是由专业人员编写的。你不太可能提高他们的表现。

关于java - 使用 LinkedList 与 HashMap 实现无向图有什么区别?遍历BFS/DFS哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58699147/

相关文章:

java - 同步不经常更新的 hashmap 的最佳方式

java - Guice 运行时依赖参数重新注入(inject)

java - 停止 adb logcat 运行

java - 如何按条件计算所有行且不超过 10

matlab - 如何在 MATLAB 图形中显示 x 轴和 y 轴?

python - 尝试使用图形工具进行 block 分区时出现 AttributeError

c - 程序知道图中从 1 到 n 的所有可能路径

java - HashMap 返回 Integer 键的错误值

java - 欧拉计划 : Programmatic Optimization for Problem 7?

java - 从嵌套的 HashMap 访问 HashMap 数据