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