相同点
不管是HashMap还是TreeMap都是通过对象来对对象进行索引的Map集合。
键值对
我们把用来索引的对象叫做Key,而索引对应的对象叫做Value。这就是我们平时所说的键值对。
类关系
他们的类关系如图所示:
HashMap和TreeMap的区别
1. 数据结构方面
HashMap是基于哈希表+数组来实现的,而TreeMap是基于红黑树来实现的。
使用HashMap需要键对象明确定义hashCode()和equals()这两个方法,为了优化HashMap空间的使用,可以调整初始容量大小和扩容。
TreeMap没有大小设置选项,因为红黑树结构总是处于平衡状态。
2. 效率方面
HashMap比TreeMap的性能更高。
HashMap时间复杂度是O(1),它通过哈希函数计算的哈希地址;TreeMap主要是保证数据平衡,时间复杂度是O(log2 n)
3. 线程安全方面
HashMap和TreeMap都是非线程安全的。
如果在多线程并发情况下建议使用ConcurrentHashMap;如果既要保证线程安全又要保证顺序,可以使用Collections.synchronizedMap()方法转化为线程安全的集合。
4. 应用场景方面
HashMap是无序的,而TreeMap是有序的。
TreeMap适用于按自然顺序或自定义顺序遍历键的场景。HashMap适用于在Map中插入、删除和定位元素。
日常开发建议多使用HashMap,需要排序时候使用TreeMap。