JAVA 中 equals()与hashcode()

HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。

equals()方法是用来判断其他的对象是否和该对象相等.

equals()方法在object类中定义如下:

public boolean equals(Object obj) {  
    return (this == obj);  
}  

很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、Integer、Double等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。改成进行的内容比较,而不再是地址的比较。

hashCode()方法给对象返回一个hash code值。这个方法被用于hash tables,例如HashMap。

同一个对象,返回的hashcode 一定相同;
两个对象,拥有不同hashcode 则两个对象一定不相同。
判断对象有相同 hashcode 后,再调用 equals() 方法,equals 相同才能说明两个对象相同。这样做可以提高效率,很大程度上避免了像 Set 的插入操作中每次都必须要经过比较equals()方法后才能进行判断是否重复的情况。

猜你喜欢

转载自blog.csdn.net/MachineRandy/article/details/80362901