Java HashMap、Hashtable、LinkedHashMap分析

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值