Java数据结构-HashMap和HashSet

目录

一.集合框架图

 二.HashMap

1.整型存储

2.其他类型存储(引用类,字符串型)

3.哈希位置冲突

1.线性探测法:

2.二次探测法/平方探测法

3.开散列法/哈希桶

4.如何尽量避免哈希数的冲突 

注意:扩容的时候要重新哈希,也就是通过哈希函数重新哈希数据在进行存储。 

三.HashSet


一.集合框架图

 二.HashMap

1.整型存储

HashMap实现自Map接口,从图中我们可以看出,实现Map接口的方法有三个,但在大多情况下,都是使用HashMap来实现,原因就是HashMap的增删查改时间复杂度都为O(1),这时我们未免会有疑问为什么HashMap的时间复杂度这么低?原因便是:

HashMap的存储是通过哈希函数来决定元素存储的位置的,比如说哈希函数为 k%3,而存储位置是一个大小为10array的数组,则1的存储位置为1%3=1,则.元素1就存储在array[1].

2.其他类型存储(引用类,字符串型)

在java中hashcode方法是Object类的native方法,返回值为int型,可以利用hashcode()方法来获取其他类型的哈希值再通过哈希函数进行存储。

3.哈希位置冲突

当进行hashmap的存储时,可能会有多个元素通过哈希函数后获得的哈

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鹏在路上_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值