hashcode方法返回該對象的哈希碼值。
hashCode()方法能夠用來來提升Map裏面的搜索效率的,Map會根據不一樣的hashCode()來放在不一樣的位置,Map在搜索一個對象的時候先經過hashCode()找到相應的位置,而後再根據equals()方法判斷這個位置上的對象與當前要插入的對象是否是同一個。
因此,Java對於eqauls方法和hashCode方法是這樣規定的:
*若是兩個對象相同,那麼它們的hashCode值必定要相同;
*若是兩個對象的hashCode相同,它們並不必定相同。java
以下代碼:this
package demos; import java.util.HashSet; import java.util.Set; /** * Created by hu on 2016/3/26. */ public class Student { private String name; private Integer age; public Student(String name, Integer age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String toString() { return name + "'s age is " + String.valueOf(age); } public boolean equals(Object other) { if(this == other) return true; if(other == null) return false; if(!(other instanceof Student)) return false; final Student stu = (Student)other; if(!getName().equals(stu.getName())) return false; if(!getAge().equals(stu.getAge())) return false; return true; } public int hashCode() { int result = getName().hashCode(); result = 29*result + getAge().hashCode(); return result; } public static void main(String[] args){ Set<Student> set = new HashSet<Student>(); Student s1 = new Student("ZhangSan", 13); Student s2 = new Student("ZhangSan", 13); System.out.println(s1.hashCode()); System.out.println(s2.hashCode()); set.add(s1); set.add(s2); System.out.println(set); System.out.println(s1.equals(s2)); } }