已知: Person类按照 id 和 name 重写了 hashCode 和 equals 方法,问下面代码输出什么?
HashSet set = new HashSet(0);
Person p1 = new Person(1001,"AA");Person p2 = new Person(1002,"BB");
set.add(p1);
set.add(p2);
p1.name = "CC";set.remove(p1);
System.out.println(set);
set.add(new Person(1001,"CC"));System.out.println(set);
set.add(new Person(1001,"AA"));System.out.println(set);public class Homework05 { public static void main(String[] args) { HashSet set = new HashSet(0); Person p1 = new Person(1001,"AA"); Person p2 = new Person(1002,"BB"); set.add(p1); //ok set.add(p2); //ok p1.name = "CC"; set.remove(p1); System.out.println(set); set.add(new Person(1001,"CC")); System.out.println(set); set.add(new Person(1001,"AA")); System.out.println(set); } } class Person{ public int id; public String name; public Person(int id, String name) { this.id = id; 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; return id == person.id && Objects.equals(name, person.name); } @Override public int hashCode() { return Objects.hash(id, name); } }
输出:
[Person{id=1001, name='CC'}, Person{id=1002, name='BB'}]
[Person{id=1001, name='CC'}, Person{id=1001, name='CC'}, Person{id=1002, name='BB'}]
[Person{id=1001, name='CC'}, Person{id=1001, name='CC'}, Person{id=1001, name='AA'}, Person{id=1002, name='BB'}]
Vector 和 ArrayList 的比较