hashcode()是定义在Object中的本地方法,它的作用是在集合中添加元素时,试想如果没有hashcode()方法,往一个集合中添加元素时需要同集合中所有的元素一个个比较,这样效率也太低了吧, java提供了hashcode,可以直接利用对象的hashcode值来定位该对象所在的区域位置,直接合该区域位置的元素进行比较即可,hashcode扮演着寻域的作用,能够大大减少equal方法的比较次数,但对于list和数组而言,hashcode方法并没有什么作用。
hashcode方法实际上是将对象的内部地址转成一个整数返回,其并不是对象存储所在的物理位置。 equals方法也是Object类中定义的方法, 两个方法最好满足虚拟机规范:在hashset, hashmap,HashTable中,当equals方法相等时,两个对象的hashcode方法要返回一样, 当两个对象的hashcode相等时,调用equals方法不一定为true。如果能够确保对象不会放入set map(set本质其实也是map)中,equals和hashcode方法就没要求了,都根本不会被调用到。
网友评论