我开始学习 Java。什么时候我可以在 TreeMap 上使用 HashMap?
大多数情况下使用 HashMap,但在需要对键进行排序时(需要迭代键时)使用 TreeMap。
HashMap
TreeMap
TreeMap 是 SortedMap的一个示例,这意味着可以对键的顺序进行排序,在对键进行迭代时,您可以期望它们是按顺序排列的。
SortedMap
另一方面,HashMap 没有这样的保证。因此,当迭代 HashMap的键时,您不能确定它们的顺序。
一般来说,HashMap会更有效率,所以当你不关心键的顺序时就使用它。
你几乎总是使用 HashMap,你应该只使用 TreeMap,如果你需要你的钥匙在一个特定的顺序。
HashMap用于快速查找,而 TreeMap用于映射上的排序迭代。
总而言之:
摘自: HashMap VS TreeMap
与已排序的密钥存储相比,TreeMap 的另一个不同之处在于,开发人员可以使用 String 密钥给出(String.CASE _ INSENSITIVE _ ORDER) ,因此比较器在执行映射访问中的密钥比较时会忽略密钥的大小写。这是不可能给这样的选项与 HashMap-它总是大小写敏感的比较在 HashMap。
我将谈谈 Java 中的 HashMap和 树木地图实现:
HashMap ——实现基本的 map 接口
Map m = Collections.synchronizedMap(new HashMap(...));
TreeMap ——实现可导航的映射接口
SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));
总之,HashMap 和 TreeMap 之间最大的区别在于 TreeMap 实现了 NavigableMap<K,V>,它提供了有序迭代的特性。此外,HashMap 和 TreeMap 都是 JavaCollection 框架的成员。您可以调查 Java 源代码以了解更多关于它们的实现的信息。
NavigableMap<K,V>
HashMap由哈希表实现,而 TreeMap由 Red-Black tree实现。HashMap和 TreeMap之间的主要差异实际上反映了 Hash和 Binary Tree之间的主要差异,也就是说,当迭代时,TreeMap 保证键顺序可以由元素的 compareTo ()方法或 TreeMap 构造函数中的比较器集确定。
Red-Black tree
Hash
Binary Tree
看看 下图。