【发布时间】:2011-01-27 12:17:19
【问题描述】:
我开始学习 Java。我什么时候会在 TreeMap 上使用 HashMap?
【问题讨论】:
-
Stackoverflow 不仅适用于提问者,也适用于寻求答案的其他人。因此,如果我在这里找到一个我没有的书中也包含的答案,那对我来说非常好......
标签: java
我开始学习 Java。我什么时候会在 TreeMap 上使用 HashMap?
【问题讨论】:
标签: java
HashMap 由 Hash Table 实现,TreeMap 由Red-Black tree 实现。 HashMap 和 TreeMap 之间的主要区别实际上反映了 Hash 和 Binary Tree 之间的主要区别,即在迭代时,TreeMap 保证可以由元素的 compareTo() 方法确定的键顺序或在 TreeMap 的构造函数中设置的比较器。
【讨论】:
我将讨论 Java 中的 HashMap 和 TreeMap 实现:
HashMap -- 实现基本地图接口
Map m = Collections.synchronizedMap(new HashMap(...));
TreeMap -- 实现可导航的地图接口
SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));
综上所述,HashMap和TreeMap最大的区别在于TreeMap实现了NavigableMap<K,V>,提供了有序迭代的特性。此外,HashMap 和 TreeMap 都是 Java Collection 框架的成员。您可以调查source code of Java 以了解有关其实现的更多信息。
【讨论】:
HashMap 用于快速查找,而TreeMap 用于在地图上进行排序迭代。
【讨论】:
除了排序键存储之外,TreeMap 的另一个区别是,开发人员可以使用字符串键提供 (String.CASE_INSENSITIVE_ORDER),因此比较器在执行映射访问时的键比较时会忽略键的大小写。 HashMap 无法提供这样的选项 - HashMap 中的比较始终区分大小写。
【讨论】:
总结一下:
【讨论】:
【讨论】:
HashMap 更省时。 TreeMap 更节省空间。
TreeMap 搜索复杂度为 O(log(N)),HashMap 为 O(1),具有良好的 hashCode()。
您几乎总是使用HashMap,仅当您需要按特定顺序排列密钥时才应使用TreeMap。
【讨论】:
大多数时候使用HashMap,但当您需要对键进行排序时(当您需要迭代键时)使用TreeMap。
【讨论】: