JAVA - HashMap特点及小结

HashMap

HashMap实现了Map接口,用于存储K,V键值对的集合类。
主要特征包括:Key可存NULL、无序、线程不安全、 底层使用了数组+链表+红黑树的结构。

特点

在阅读源码基础上,查阅并结合其他文章资料,以介绍+提问的形式,列出HashMap以下常见特点若干项。

  1. HashMap存储单元类型。
    hashMap内部使用Node类型对象来保存内容。
    Node类型中包括hash、key、value、next四部分。

  2. HashMap的存储结构。
    HashMap的存储结构中使用了Node类型的数组、单链表、和红黑树。
    单链表和红黑树是用来处理哈希冲突时的节点存储。

  3. HashMap初始容量、最大容量、负载因子、如何扩容。
    初始容量:默认为16。
    最大容量:为2^30。
    指定容量时,使用tableSizeFor方法向上取值,且未2的幂次方,比如:30向上取值为32。
    负载因子默认为0.75,扩展因子*容量为扩容阈值,当达到扩容阈值时,容量扩为原来的2倍。

  4. HashMap put 插入过程。
    简单划分为以下4个过程:

    • 初始化检查
      如果数组为空,则初始化数据。

    • 确定插入位置
      散列计算确定插入的哈希桶位置,采用Hash值对N取模【 hash & (N-1)】,确定哈希桶的位置。

    • 哈希碰撞、处理阶段
      如果要插入的哈希桶为空,则直接插入节点。
      如果哈希桶有值了,则判断是哈希冲突还是重复插入。
      如果是重复插入,则更新插入的值。
      如果是哈希冲突,则采取处理哈希冲突的策略,策略包括拉链法和构建红黑树。

    • 容量检查、扩容
      插入节点后,如果超出了阈值【大小*负载因子】,进行Resize扩容操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值