public class HashMapTest {
public static void main(String[] args) {
Student s1=new Student("张三");
Student s2=new Student("张三");
//重写equals之前比较的是二者的地址 返回结果为false 重写后为true
System.out.println(s1.equals(s2));
//比较二者的hashcaode值 两个名字相同的学生应该是同一个对象
//但重写之前 hashcode不相等 会重复放入 HashMap放对象先看hashcode
System.out.println(((s1.hashCode())==s2.hashCode()));
//调用IDEA自带的equals和hashcode 二者返回的boolean一定要相同
}
}
import java.util.Objects;
class Student {
private String name;
public String getName(String name){
return name;
}
public void setName(String name) {
this.name = name;
}
public Student(String name) {
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
}
我们在使用HashMap或者HashSet时 加入一些对象 需要进行二者比较
在重写以上两种方法前 比较的二者的内存地址是否相等 而非内容 所以推荐用IDEA自动重写
保证元素的无序性和key的不重复性