我遇到过两种无向图(邻接表)的实现,但我不知道为什么要使用其中一种而不是另一种。
我成功地使用 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/