- import java.util.HashSet;
- class Man
- {
- public String name;
- public int age;
- public Man(String n, int a)
- {
- name = n;
- age = a;
- }
-
- public int hashCode()
- {
- return name.hashCode() + age;
- }
-
- public boolean equals(Object o)
- {
- boolean result = false;
-
- if (o == null)
- result = false;
-
- if (o instanceof Man)
- {
- Man s = (Man)o;
- if ((s.age == this.age) && s.name.equals(this.name))
- result = true;
- }
- return result;
- }
- }
- public class TestHashCode
- {
- public static void main(String args[])
- {
- HashSet<Man> hs = new HashSet<Man>();
-
- Man m1 = new Man("Jimmy", 27);
- Man m2 = new Man("Jimmy", 28);
- Man m3 = new Man("Jimmy", 29);
-
- hs.add(m1);
- hs.add(m2);
- hs.add(m3);
-
- for (Man m: hs)
- System.out.println(m.name + ":" + m.age);
-
- m1.age = 30;
- m2.age = 30;
- m3.age = 30;
-
- hs.remove(m1);
-
- for (Man m: hs)
- {
- System.out.println(m.name + ":" + m.age);
- }
- }
- }
复制代码 输出结果:
Jimmy:27
Jimmy:28
Jimmy:29
Jimmy:30
Jimmy:30
Jimmy:30
结果让我有点费解。
HashSet在存储element之前,需要检查唯一性。但加入以后,却又可以被修改。
如上面,我如果修改了内容是的这些元素变成相同了,hashset会马上检查吗
但是按照上面的,我去remove,为什么一个也不成功呢?
|
|