hashmap的源码解读原理解析

1.什么是hash

它是将一个任意长度的二进制值通过一个映射关系转换成一个固定长度的二进制值。

a.任意长度的二进制值

b.映射关系(哈希算法--就相当于一个大学里面的学号的一个映射规则)

c.固定的二进制值(哈希值--相当于我们的大学里面的学号)

任意长度的二进制值 和 固定长度的二进制值 是一个一 一对应关系

固定长度的二进制值就相当于一个任意长度的二进制值的一个摘要

固定长度的二进制值  相当于一个关键字  key

真正有效的数据 就是这个学员的基本信息,一个任意长度的二进制值  value

key-----value

hash 只是确定了一个key和一个value的唯一映射关系。

为什么要这么做:

管理学号比管理学生的基本信息容易,学号是整型数据,计算机管理整形数据效率高节省时间,计算及排序,非常灵活的办法

2.hash表

解决了根据key找value的问题

特定:最重要的特定---它存储效率很高,取数据的时间复杂度是1  O(1)

hash 通过1个key1个输入,通过1个哈希函数,来找到数组中与这个key唯一映射的value

根据这个hash函数 找到 数组中这个value的下标

table aaa=[];

int index=hash(key);

int value=aaa[index];线性表的时间复杂度O(n)

3.hash函数

key:找下标,有哪些方法可以找到下标

a.除留取余数法(取模)

定义数 aaa 长度是16

int index = key%m;

m的取值规则是 m要取比数组长度小的最大质数。

m = 15;

int 1= 1%15;

key=1,value = 23;

key = 17 value=22; int index=17%15

key = 16,value=

4.hash表处理冲突方法:

a.线性探测法:探测的步长法 步长1或2,探测一个空位置

b.链表形式:

把以前的旧数据先保存,再用新数据指向旧数据形成链表。

1.hashmap初始容量是多少,负载因子是什么?

2.hashmap的put流程是什么,为什么这么做?

hashmap省去遍历,key是无序存储,造成一定的空间浪费,空间换取时间

hashmap中的hash底层依赖hashcode和equals

hashcode值是对象的逻辑值(门牌号),地址值是是对象的物理值(标识符),门牌号一样,但是内容不一定一样

hashmap的put方法时先比较hash值,再比较地址值或equals与hashcode和equals方法相关。少了很多判断,效率较高

如果类没有重写hashcode和equals,默认用object的,一般来说不会一样,string重写后会把相同的字符串去掉

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值