HashMap原理和rehash解释

采用hash结构的容器,除了采用hash算法来决定集合中元素的位置
并通过hash算法来控制集合的大小


HashMap的内部实现机制
HashMap的内部实现机制是对数据结构中哈希表(Hash Table)的实现,Hash表又叫散列表。
Hash表是根据关键码Key来访问其对应的值Value的数据结构,他是通过一个映射函数把关键码映射到表中一个位置
来访问该位置的值,从而加快查找的速度。这个映射函数叫做Hash函数,存放的数组叫做Hash表。


Hash的实现:
主要是 哈希算法 和 冲突的解决
计算出map中key的哈希值,在哈希表中找到<key,value>的位置,根据key找value
当多个哈希值冲突的时候,在哈希值的同一个位置上使用链表结构来保存多个对象,而hashMap访问map的时候
也是根据key的hashCode的值来快速定位,入伙HashMap中俩个以上的元素具有相同的HashCode值,将会导致性能下降


rehash的解释:
在创建hashMAP的时候可以设置来个参数,一般默认
初始化容量:创建hash表时桶的数量
负载因子:负载因子=map的size/初始化容量
当hash表中的负载因子达到负载极限的时候,hash表会自动成倍的增加容量(桶的数量),并将原有的对象
重新的分配并加入新的桶内,这称为rehash。这个过程是十分好性能的,一般不要
一般建议设置比较大的初始化容量,防止rehash,但是也不能设置过大,初始化容量过大 浪费空间

 

参考 java疯狂讲义

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值