Java HashMap 详解

HashMap

HashMap 继承自 AbstractMap,实现了 Map 接口,基于哈希表实现,元素以键值对的方式存储,允许键和值为 null。因为 key 不允许重复,因此只能有一个键为 null。HashMap 不能保证放入元素的顺序,它是无序的,和放入的顺序并不相同。HashMap 是线程不安全的。

1. 哈希表

哈希表基于数组实现,当前元素的关键字通过某个哈希函数得到一个哈希值,这个哈希值映射到数组中的某个位置。哈希函数的好坏直接决定该哈希表的性能

当我们对某个元素进行哈希运算,得到一个存储地址,然后要进行插入的时候,发现已经被其他元素占用了,这就是所谓的哈希冲突,也叫哈希碰撞

解决方法如下:

  • 开放定址法:当冲突发生时,使用某种探查技术在散列表中形成一个探查序列,沿此序列逐个单元地查找,直到碰到一个开放的地址(即该地址单元为空),将待插入的新结点存入该地址单元
  • 链地址法:可将散列表定义为一个由 m 个头指针组成的指针数组,将所有关键字为同义词的结点链接在同一个单链表中,初始时数组中各分量的初值应均为 1
  • 再哈希法:同时构造多个不同的哈希函数,发生冲突时再换别的哈希函数
2. JDK1.7 实现原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值