【发布时间】:2011-10-24 23:44:44
【问题描述】:
关于java HashSet的新手问题
Set<User> s = new HashSet<User>();
User u = new User();
u.setName("name1");
s.add(u);
u.setName("name3");
System.out.println(s.contains(u));
有人可以解释为什么这段代码输出 false 吗?此外,这段代码甚至没有调用 User 的 equals 方法。但是根据 HashSet 和 HashMap 的来源,它必须调用它。 User 的方法 equals 只是在用户名上调用 equals。方法hashCode返回用户名的hashCode
【问题讨论】:
-
引用 Jon Skeet “hashsets 中的对象应该是不可变的,或者你需要遵守纪律,在它们被用于 hashset(或 hashmap)之后不要更改它们。” - stackoverflow.com/questions/4718009/…