HashMap 和 TreeMap 的区别

相同点

HashMap 定义:

public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable

TreeMap 定义:

public class TreeMap<K,V>
    extends AbstractMap<K,V>
    implements NavigableMap<K,V>, Cloneable, Serializable
  • 都继承了 AbstractMap <K, V>类,实现了 Cloneable 和 Serializable 接口
  • 以键值对的形式存储元素,其中键是唯一的,而值可以重复
  • 都是线程不安全的集合,要实现线程安全要么使用Collections.sychronizedMap(XXX),要么使用ConcurrentHashMap
  • 都是fail-fast的,即迭代器遍历集合对象时,如果对集合对象进行了修改,将抛出ConcurrentModificationException,终止遍历

不同点

  • **实现接口:**HashMap 实现了 Map 接口,而 TreeMap 实现的是 NavigableMap 接口。NavigableMap 是 SortedMap 的一种,实现了对 Map 中 key 的排序
  • **key 排序:**HashMap 不对键执行排序,而 TreeMap 通过使用 compareTo() 方法或在 TreeMap 的构造函数中设置的比较器保留顺序。更进一步的,由于 key 排序 TreeMap 不允许异构元素,而 HashMap允许
  • **数据结构:**HashMap 的底层数据结构是数组+链表+红黑树(基于哈希表),其中数组是主体,链表是为了解决hash冲突,红黑树是为了在链表过长时加快搜索效率而存在的。**其查找、插入和删除的时间复杂度为O(1)。**TreeMap 的底层数据结构只有红黑树(基于树),不支持链表操作,其查找、插入和删除的时间复杂度为O(logn)。在插入和删除节点的时候会进行重排序,对性能有影响
  • **null 键/值:**HashMap 允许单个 null 键和多个 null 值,TreeMap 不允许使用 null 键但可以有多个 null 值
  • **比较方法:**HashMap 使用 equals() 方法比较键,而 TreeMap 使用 compareTo() 方法比较键

HashMap 的红黑树和 TreeMap 的红黑树有什么区别

  • HashMap 的红黑树是为了加快查询速度,而 TreeMap 的红黑树是为了对元素进行 key 排序,按照排序输出元素?
  • HashMap 的红黑树节点个数不能无限增长,当集合中的节点数超过了阈值将会进行扩容,集合将进行扩容,原始的红黑树将可能退化成链表结构。而 TreeMap 是不存在类似于 HashMap 的扩容机制,其节点数是可以无限增长的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值