equals和hashCode方法分析
1.HashSet存放的是无序,不能重复的对象,当添加一个对象的时,它会先检查此对象的
hashCode值是否与集合中对象的hashCode值相等,如果不等,直接将对象加进去,如果相等,则再用equals方法判断,如果返回的是true表示集合中已经存在此对象,不再进行添加,若返回false将对象添加进去
2.简单来说,如果两个对象equals返回true则它们的hashCode值一定相等,如果返回false它们的hashCode不一定不同,因为equals判定的是否为同一个对象,当然这是针对未被重写来说
看下面例子
import java.util.HashSet;public class SetTest {public static void main(String[] args) {HashSet set = new HashSet();Student s1 = new Student("zhansan",20);Student s2 = new Student("zhansan",20);set.add(s1);set.add(s2);System.out.println(set);}}class Student {private String name = null;private int age = 0;public Student(String name, int age){this.name = name;this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic int hashCode() {final int PRIME = 31;int result = 1;result = PRIME * result + age;result = PRIME * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;final Student other = (Student) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}}