HashMap(数组+链表+红黑树)和TreeMap(红黑树结构)对比

是否线程安全

二者均为非线程安全
hashmap :如果需要满足线程安全,可以用Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap

底层结构实现

hashmap:基于哈希表实现,数组+链表+红黑树
-----------在JAVA 8中,利用了红黑树,所以在JAVA 8 是由数组+链表+红黑树组成。从JAVA 7中得知,在查找元素时候,可以根据hash值快速定位到数组具体的下标,但是后面的操作需要顺着链表一个一个的比较下去才能找到所需值,时间复杂度取决于链表的长度,为O(n),为了降低这一部分处理的开销,在JAVA 8中,当链表中的元素超过8个之后,会将链表转换为红黑树,在这些位置进行查找的时候可降低时间复杂度 为O(logn),
在这里插入图片描述
-----------为了优化HashMap空间的使用,您可以调优初始容量和负载因子
capacity:当前数组容量,始终保持 2^n,可以扩容,扩容后数组大小为当前的 2 倍。
loadFactor:负载因子,默认为 0.75。
threshold:扩容的阈值,等于 capacity * loadFactor。
treemap:红黑树

适用场景

HashMap:适用于在Map中插入、删除和定位元素。
Treemap:适用于按自然顺序或自定义顺序遍历键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值