Posted on 2009-07-12 09:18
飘摇 阅读(1019)
评论(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、