考核HashSet的基础知识,以及底层源码,重写HashCode与不重写的区别.
Person类:
public class Person {
private int ID;
private String name;
public Person() {
}
public Person(int ID, String name) {
this.ID = ID;
this.name = name;
}
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"ID=" + ID +
", name='" + name + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
if (ID != person.ID) return false;
return name != null ? name.equals(person.name) : person.name == null;
}
@Override
public int hashCode() {
int result = ID;
result = 31 * result + (name != null ? name.hashCode() : 0);
return result;
}
}
测试代码↓
import java.util.HashSet;
public class hashset_test {
public static void main(String[] args) {
HashSet hs = new HashSet();
Person p1 = new Person(1,"aa");
Person p2 = new Person(2,"bb");
hs.add(p1);
hs.add(p2);
System.out.println(hs);
p1.setName("cc");
System.out.println(hs);
hs.remove(p1);
System.out.println(hs);
hs.add(new Person(1, "cc"));
System.out.println(hs);
hs.add(new Person(1, "aa"));
System.out.println(hs);
}
}
猜猜输出是什么?
答对了吗^_^