散列、散列码、hashCode()

散列:

散列就是将键保存在某处,以便能很快找到。

散列码:

1、存储一组元素最快的是数组,所以用它来表示键的信息不是键本身,通过键对象生成一个数字,就是散列码,将其作为数组的下标。

2、因为不同的键可能生成相同的散列码,产生相同的下标,所以数组的大小就不重要了,任何键在数组中都有位置。

3、hashCode()生成的就是散列码

举个形象一点的例子:

一年有 365 天,从 1 编号到 365,下面我定义一种编码方法,每个人按照他生日那天的编号作为他的标识码,这样,一群人每个人就会有一个标识码。

这个标识码有什么用呢?好,下面我说,请所有单号站一起,双号站一起。此后,当我要找一个人的时候,如果知道他的编号是单号,那我只需要到单号里去找,查找效率提高了一倍。

如果我说,请编号能被 16 整除的人站到一起,被 16 除余 1 的人站到一起,被 16 除余 2 的人站到一起…… 此后,当我要找一个人的时候,查找效率就会提高到 16 倍。

这就是散列码。所以,一个好的散列码算法,配合一个适当的存储机制,就能够实现高效的存储管理。

4、从上面可以知道散列码不必唯一,但是通过hashCode()和equals()必须能完全确定对象身份。

5、综上:
HashMap查询一个值的过程为
①计算散列码;
②使用散列码查询数组;
③因为数组只是保存了值的list,所以对list中的值使用equals()进行线性查询。

所以,HashMap不是查询整个list,而是快速跳到数组的某个位置,只对很少的元素进行比较,所以查询速度快。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值