我开始学习Java。在什么情况下我会使用HashMap而不是TreeMap?
我开始学习Java。在什么情况下我会使用HashMap而不是TreeMap?
HashMap
更加时间高效。TreeMap
更加空间高效。 - ericksonHashMap
是使用哈希表实现的,而 TreeMap
是使用红黑树实现的。实际上,HashMap
和 TreeMap
的主要区别反映了哈希和二叉树之间的主要区别,也就是在迭代时,TreeMap
保证可以按照键的顺序进行遍历,这个顺序由元素的 compareTo() 方法或者 TreeMap 构造函数中设置的比较器决定。
请查看下面的图表。
总结:
通常情况下使用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框架的成员。您可以查看Java的源代码以了解更多它们的实现细节。
你几乎总是使用HashMap
,只有当你需要按特定顺序排列键时才应该使用TreeMap
。
HashMap
用于快速查找,而 TreeMap
用于对 map 进行排序迭代。
除排序关键存储之外,TreeMap 另一个区别是开发人员可以使用 String 键提供 (String.CASE_INSENSITIVE_ORDER)。这样,在执行映射访问时,比较器会忽略键的大小写。这在 HashMap 中不可能提供这样的选项 - HashMap 中始终对键进行区分大小写的比较。