Java HashMap、Hashtable、LinkedHashMap分析

本文介绍了HashMap、Hashtable、LinkedHashMap和TreeMap这四种Java集合框架中的数据结构。HashMap是基于哈希表的,非线程安全,适合单线程环境,JDK1.8后链表超过8个会转为红黑树。Hashtable则是线程安全,适用于多线程。LinkedHashMap保持插入顺序,而TreeMap通过红黑树实现,能按特定顺序遍历和去重。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HashMap是基于哈希表来实现的,是结合了数组、链表、红黑树(1.8)来存储对象的。它线程不安全,适合在单线程中使用。

它的默认加载因子为0.75,默认数组大小是16,当数组的容量超过0.75,当前数组容量是<<1(相当于乘以2),扩大1倍,扩充次数过多,会影响性能,每次扩充表示哈希表重新散列(重新计算每个对象的储存位置),尽量避免扩充。

它的存储过程是:把key通过hash()方法计算hash值,然后通过这个hash值对数组长度取余(默认长度为16),这个取余后的值决定对象在数组中的位置,当数组中的这个位置有多个对象时,以链表的结构存储,JDK1.8后,数量大于8时,链表将转换为红黑树结构储存。这是为了取值更快。

Hashtable是基于哈希表来实现的,是结合了数组、链表来存储对象的。它线程安全,适合在多线程中使用。

它的默认加载因子为0.75,默认数组大小是11,当数组的容量超过0.75,当前数组容量是<<1后加1(相当于乘以2加1)。

LinkedHashMap是HashMap的子类,由于HashMap不能保证顺序恒久不变,所以使用了一个双重链表来维护元素添加的顺序
TreeMap是基于红黑树来存储对象的,可以排序和去重,以对象为key时要实现Comparabel或者与Comparator

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值