hash冲突的解决方案

本文介绍了hash冲突的概念,详细阐述了开放地址法(线性探测、二次探测和双重哈希)和链表法在处理冲突中的区别,以及在HashMap中如何运用这些方法。特别指出HashMap对Key和Value的要求,特别是关于对象类型和基本数据类型的处理方式。
摘要由CSDN通过智能技术生成

hash冲突就是指不同的字符串却具有了相同的hashcode。hash冲突的解决方法主要分为开放地址法和链表法两类。 开放地址法又可以分为线性探测、二次探测、双重哈希法。 线性探测,就是当发生hash冲突时,一直依次往下寻找空白的位置,但这种方法经常会造成原始聚集问题。 二次探测,就是当发生hash冲突时,会依次寻找原始位置往下1,4,9....的空白位置。但这种方法会造成二次聚集的问题。 双重哈希法,就是在原始的hash函数之上,再增加一个hash函数原来计算探测步长,第二个hash函数必须与第一个hash函数不同,同时要求探测步长不能是0。表的容量为质数。 链表法则是在发生hash冲突时,将数据填充进链表中。hashmap的底层原理便是使用了这种方法来处理hash冲突。 两种方法的比较: 插入过程中,开放地址法是先计算出hash值,然后依次寻找其他空白的位置,而hashmap是先计算出hash值,然后将其插入所对应的链表之中。 查找过程中,开放地址法是先计算出hash值,若在该位置为寻找到对应的值,便会依次寻找其他位置,直到寻找到值,而hashmap是先计算出hash值,然后在对应的链表之中寻找。

注意

因此,在使用 HashMap 时:

  • Key:必须是对象类型,不能是基本数据类型。如果要使用基本数据类型作为键,需要将其封装成对应的包装类。

  • Value:可以是对象类型也可以是基本数据类型。如果是基本数据类型,会自动进行装箱以及拆箱操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值