HashMap已成为Java集合的一部分。它提供了Java Map Interface的基本实现。数据以(键,值)对形式存储。您需要知道其键才能访问值。HashMap被称为HashMap,因为它使用了Hashing技术。TreeMap用于通过抽象类实现Map Interface和NavigableMap。映射是根据其键的自然顺序或创建映射时提供的比较器进行排序的,具体取决于使用哪个构造函数。
HashMap和TreeMap之间的相似性
除了差异之外,hashmap和treemap之间还有以下相似之处:
HashMap和TreeMap类都实现Serializable和Cloneable接口。
HashMap和TreeMap都扩展了AbstractMap
HashMap和TreeMap类都对键值对进行操作。
HashMap和TreeMap都是非同步集合。
HashMap和TreeMap都无法快速收集。
两种实现都是收集框架的一部分,并将数据存储在键值对中。
HashMap和TreeMap的主要区别
以下是HashMap与TreeMap的主要区别:
1.结构与实施
哈希映射是基于哈希表的实现。它扩展了Abstract Map类并实现了Map接口。哈希图基于哈希原理。Map实现充当存储桶的哈希表,但是当存储桶太大时,它们将转换为Tree节点,每个节点的结构与TreeMap的节点相似。TreeMap扩展了Abstract Map类并实现了Navigable Map接口。树形图的基础数据结构是一棵红黑树。
2.迭代顺序
哈希映射的迭代顺序未定义,而TreeMap的元素按自然顺序或使用比较器指定的自定义顺序排序。
3.表现
由于Hashmap是基于哈希表的实现,因此对于大多数常见操作,它提供的恒定时间性能等于O(1)。在哈希图中搜索元素所需的时间为O(1)。但是,如果哈希映射中的实现方式不正确,则可能导致额外的内存开销和性能下降。另一方面,TreeMap提供的性能为O(log(n))。由于哈希图是基于哈希表的,因此它需要连续的内存范围,而树图仅使用保存项目所需的内存量。因此,HashMap比树图更节省时间,但树图比HashMap更节省空间。
4.空处理
HashMap允许使用几乎一个null键和许多null值,而在树形图中,尽管允许null值,但不能将null用作键。如果将null用作hashmap中的键,则它将抛出null指针异常,因为它内部使用compare或compareTo方法对元素进行排序。
这是一个比较表,显示了哈希图和树图之间的区别:
比较基础 哈希图 树状图
语法 公共类HashMap扩展了AbstractMap实现Map,Cloneable,Serializable 公共类TreeMap扩展了AbstractMap的实现,NavigableMap,Cloneable,Serializable
顺序 HashMap不提供任何顺序的元素。 TreeMap元素以自然顺序或定制顺序排序。
速度 HashMap快速 TreeMap慢
空键和值 HashMap允许将几乎一个键作为null和多个null值。 TreeMap它不允许将null作为键,但允许多个null值。
内存消耗 由于基础哈希表,HashMap消耗更多的内存。 与HashMap相比,TreeMap消耗的内存更少。
功能性 HashMap仅提供基本功能 TreeMap它提供了更丰富的功能。
比较方法 HashMap基本上使用equals()方法比较键。 TreeMap使用compare()或compareTo()方法比较键。
性能 HashMap给出O(1)的性能。 TreeMap提供O的性能(log n)
数据结构 HashMap使用哈希表作为数据结构。 TreeMap利用红黑树进行数据存储。
同质和异质元素 HashMap它允许同质和异质元素,TreeMap因为它不执行任何排序。 它在执行排序时仅允许同质元素。
用例 HashMap当我们不需要按排序顺序的键值对时使用。 TreeMap当需要对地图的键值对进行排序时使用。
结论
从本文中可以得出结论,哈希映射是Map接口的通用实现。它提供了O(1)的性能,而Treemap提供了O(log(n))的性能。因此,HashMap通常比TreeMap更快。