Hash,Hashcode

哈希是一种加密算法
哈希函数也成为散列函数或者杂凑函数。哈希函数可以将任意长度的消息M映射成为一个长度较短且长度固定的值H,它是一种单向密码体制,不可逆映射,只有加密过程,没有解密过程。
无论输入是什么数字格式、文件有多大,输出都是固定长度的比特串。
Hash函数的特点
Hash函数具有如下特点。
易压缩:对于任意大小的输入x,Hash值的长度很小,在实际应用中,函数H产生的Hash值其长度是固定的。
易计算:对于任意给定的消息,计算其Hash值比较容易。
单向性:对于给定的Hash值,要找到使得在计算上是不可行的,即求Hash的逆很困难。在给定某个哈希函数H和哈希值H(M)的情况下,得出M在计算上是不可行的。即从哈希输出无法倒推输入的原始数值。这是哈希函数安全性的基础。
抗碰撞性:理想的Hash函数是无碰撞的,但在实际算法的设计中很难做到这一点。

hashcode
hashcode就是hash表中对应的位置也就是代表对象的地址,但是这里的地址跟物理地址不一样,因为物理地址是存在于内存中的,而hashcode是以物理地址经过hash函数计算得来即hashcode
hashcode的作用
前面说了这么多关于hash函数,和hashcode是怎么得来的,还有hashcode对应的是hash表中的位置,可能大家就有疑问,为什么hashcode不直接写物理地址呢,还要另外用一张hash表来代表对象的地址?接下来就告诉你hashcode的作用。
HashCode的存在主要是为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的(后半句说的用hashcode来代表对象就是在hash表中的位置)
为什么Hashcode查找速度会更快,打个比方,如果有一个能存10000个数的内存,再其中放10000个不同的数字的话,当存放9999个数的时候最笨的办法就是需要把之前的数字遍历一遍,
好一点的话就分区,把1-100分一个区,100-200分一个区,当存的数字是99的时候 就在1-100这个区里边遍历一遍这样就缩小了遍历次数,但是Hashcode的做法比这样更明智,比如hash表中有1,2,3,4,5,6,7,8这8个位置,存一个数为hashcode1
当存到180个数的时候可能每个区里边有±20个数,也就是有20个数的hashcode是相同的,只需要和这20个数进行equas进行比较即可,如果不一样就存放在该hash表的位置,有相同的话就存储失败,
实际上hash表中有很多位置,这里只是举例只有8个,所以比较的次数会让你觉得也挺多的,实际上,如果hash表很大,那么比较的次数就很少很少了。 通过对原始方法和使用hashcode方法进行对比,我们就知道了hashcode的作用,并且为什么要使用hashcode了

equals方法和hashcode的关系
1、如果两个对象equals相等返回true,那么这两个对象的HashCode返回值一定也相同
2、如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置
3、重写equals()方法,必须重写hashCode()方法,以保证equals方法相等时两个对象hashcode返回相同的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值