简述哈希表

哈希表是一种数据结构,它使用哈希函数组织数据,以支持快速插入和搜索。当我们插入一个新的键时,哈希函数将决定该键应该分配到存储位置,并将该键存储在相应的存储位置中
当我们想要搜索一个键时,哈希表将使用相同的哈希函数来查找存储位置,并只在存储位置中进行搜索。

数组:java.util.HashMap$Node(表示一个单向链表)

数组的长度:16

数组的扩容方式:新长度 = 旧长度<<1;

可以通过构造方法指定加载因子。加载因子(默认0.75)

可以通过构造方法指定哈希表数组的长度:

实际的长度>=传入容量,则最近2的次方的值。

判断新增的两个元素是否重复:

比较两个对象的哈希值&&(地址值相同||equales相同)

新增过程:

  • 计算新增元素的哈希值
  • (假设数组已经创建出来),通过哈希值%数组长度()
  • 如果该位置为null:则直接新增

如果该位置不为null:

判断该元素是否重复

如果不重复:则新增到该索引值位置链表的最后

如果重复:则不新增

String覆盖重写了HashCode方法,只要内容相同,哈希值一定相同

什么情况下会扩容:

同一索引值下元素个数大于8,并且数组长度<64

数组的索引值,占有率达到0.75(默认值)

什么情况下会转红黑树:

同一索引值下元素个数大于8,并且数组长度>=64

只转该索引值下的链表结构

注意:同一索引值下元素不能超过8个,如果超过扩容,把元素分开,让其小于8个

或者同一索引值下元素个数大于8,并且数组长度>=64就会把链表结构转换成红黑树

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值