Hashcode详解

Hashcode

1.什么是hashcode?Hashcode是怎么来的?
2.为什么要有hashcode?Hashcode用来干嘛?

要了解hashcode是什么,先来介绍一下hash函数,hash表的大概
在这里插入图片描述
在这里插入图片描述

Hash是一类函数,通过该函数的算法实现来得到一个hash值。需要注意的是hash函数不是具体某一个函数,而是指某一类函数或者说算法。这类算法简单来说就是把数据进行压缩分类。由于通常要把一堆很大的数据压缩成一段比较小的数据,所以看起来有点像分组。(比如把1000个数据,通过算法,压缩进100个数据空间里),然后就用这100个数据来代表这1000个数据。从这就可以看出来那100个数据每个平均代表的肯定不止一个,这就是hash冲突,后面再说。

这个时候,我们就需要知道另一个东西,hash表,通过hash算法得到的hash值就在这张hash表中,也就是说,hash表就是所有的hash值组成的,有很多种hash函数,也就代表着有很多种算法得到hash值,如上面截图的三种,等会我们就拿第一种来说

3.Hashcode
Hashcode就是通过hash函数得来的。 hashcode就是在hash表中的位置。(这里需要注意的是hashcode不是一直不变的,它是根据你hash算法的定义,hashcode的值会有所改变的)。
通常一开始每个对象都会有一个默认的hash函数来计算这个对象的hashcode。一般一开始的一个对象的hashcode是根据这个对象的物理地址转换成的一个整数,然后再用这个整数通过hash函数,就得到
了一个hashcode的值(再强调,这个hashcode的值会根据hash函数的不同而不同的)。
所以,hashcode是什么呢?就是在hash表中对应的位置。这里如果还不是很清楚的话,举个例子,hash表中有 hashcode为1、hashcode为2、(…)3、4、5、6、7、8这样八个位置,有一个对象A,A的物理地址转换为一个整数17(这是假如),就通过直接取余算法,17%8=1,那么A的hashcode就为1,且A就在hash表中1的位置。肯定会有其他疑问,接着看下面,这里只是举个例子来让你们知道什么是hashcode

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值