用LinkedList和HashMap实现无向图有什么区别?遍历BFS / DFS有什么更好的选择?

时间:2019-11-04 18:28:48

标签: java graph hashmap traversal

我遇到了两种针对无向图(邻接表)的实现,但是我无法说出为什么将其中一种用于另一种。

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

使用HashMaps,我知道插入顺序不会得到维护,这是否意味着您不能像DFS那样进行任何遍历?如果是这样,那不会违反使用HashTable的目的,因为那样您将如何在没有插入顺序的情况下正确遍历?

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

1 个答案:

答案 0 :(得分:1)

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

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

HashMap使用HashSet作为其键集,非常理想。然后,您可以为每个键使用一个代表一对的对象,例如Pair<String, String>,也可以只使用格式为"A,B"的String,其中A和B是顶点的名称。

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