理解HashCode() 散列算法

Posted on 2009-07-12 09:18 飘摇 阅读(1004) 评论(0)  编辑  收藏 所属分类: Java 核心技术
   HashCode() equals()是Objects类的两个基本方法,都可以被重写,HashCode()是根据内存地址计算出一个散列码,equals()是比较两个对象的引用是否相同,在数据存储中,用到的HashMap就是由HsahCode()的帮助来提高效率的。
  使用散列的价值就在与速度,散列使得查询可以快速进行,在Map中存储的都是键值对,对Map的查询就是对键的查询,为了提高速度就是保持键的排序状态,然后使用Collections.binarySearch()进行查询,
  散列则更进一步,它将键保持在某处,以便可以快速的找到,我们知道存储一组元素最快的数据结构是数组,所以用它来表示键的信息,只是保存键的信息而不是键的值,我们都知道数组有一个特性就是空间大小一旦固定就不可以改变,因此y就有一个问题,要想在Map中保存任意数量的“值”,但是如果“键”的数量被数组的容量限制了,那该怎么办?应该是数组并不保存”键“本身,而是通过”键“对象生产一个数字,将其作为数组的下标,这个数字就是散列码,为解决数组容量冲突的问题,不同的”键“可以产生相同的下标,也就是说可能会有冲突。因此,数字多大就不重要了,每个键总能在数组中找到它的位置,散列表中的”槽位“通常称为”桶“。
  正确理解equals()方法必须满足下面五个条件:
 1,自反性,对任意x,x.equesl(x) 一定返回true
 2, 对称性,对任意x和y,如果x.equals(y)返回true ,则y.equals(x)也返回true。
3,传递性,对任意x,y,z..如果有x.equals(y)返回true,y.equals(z)返回true,则x.equals(z)一定返回true
4,一致性,对于任意x,y ,在条件不变的情况下无论调用多少次x,equals(y) 结果都将返回true  or false.
5,对任何不是null的想,x.equals(null)一定返回false、
  

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 15, comments - 3, trackbacks - 0, articles - 2

Copyright © 飘摇