javaSE进阶-哈希表

javaSE进阶-哈希表


哈希表

  • JDK8之前,底层采用数组+链表实现,可以说是一个元素为链表的数组
  • JDK8之后,在长度比较长的时候,底层实现了优化
  • 哈希表又是hashSet集合的底层,默认初始化容量为16,

怎样把哈希值存入哈希表中

在这里插入图片描述因为,哈希表默认容量为16,所以它的下标为0-15,而每一个字符串都有一个哈希值,我们需要把哈希值存入哈希表中

我们需要先做个一个计算
将字符串的哈希值取16的余
如“hello”的哈希值 99162322 % 16 = 2 余数为2,就存储到下标为2的哈希表中
在这里插入图片描述声明:后存储的元素它会先与已经存储在下标为2的哈希表中的数据相比较,先比较他们的哈希值是否相同,不相同就存储在同一位置上,相同再比较字符串内容是否相同(hello.equlas(“world”)),如果相同就不存储,不相同就存储在同一位置上。

首先,我们知道hello已经存储在下标为2的哈希表中,当我们存储world时,它就会先于已经存储在下标为2的哈希表中的数据相比较,先比较他们的哈希值是否相同,不相同就存储在同一位置上,比较发现hello与world的哈希值不相同,所以world这个元素也存入到了下标为2的哈希表中,同理java这个元素也存储到下标为2的哈希表中

当我们存储第四个元素world时,它也会与先存入哈希表中的数据相比较,发现它与之前存入的world元素的哈希值相同,这时就会比较它俩字符串内容(world.equlas(“world”))是否相同,发现是相同的,所以它两重复了,那么第四个元素world就不能存储到哈希表中

同理:通话这个字符串的哈希值除以16的余数是3,那么他就存储到下标为3的哈希表中
存储“重地”这个元素时,它先与通话这个元素的哈希值比较,结果相同,再比较字符串内容,发现是不同的,那么重地这个元素也会存储到下标为3的哈希表中

相同元素是不能同时存储在哈希表中的,所以Set集合不能存储相同元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值