Hash,Hashcode

tech2024-07-30  61

哈希是一种加密算法 哈希函数也成为散列函数或者杂凑函数。哈希函数可以将任意长度的消息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返回相同的值。

最新回复(0)