我正在用Java编写一个程序,我想使用HashSet(和HashMap)。我无法使contains(和containsKey)方法起作用。我想我必须在某处覆盖一些equals方法才能使用。我们的想法是获得以下代码来生成输出:true。有关如何做到这一点的任何想法?
import java.util.HashSet;
import java.util.Set;
public class Sets {
public static void main(String args[]){
Set<StringBuilder> wordSet = new HashSet<StringBuilder>();
StringBuilder element = new StringBuilder("Element");
wordSet.add(element);
StringBuilder element2 = new StringBuilder("Element");
System.out.println(wordSet.contains(element2));
}
}
答案 0 :(得分:6)
这里不能使用StringBuilder
,因为StringBuilder
使用引用相等,而不是内容相等。只需使用String
代替。
(这是有道理的,因为StringBuilder
是可变的,并且两个StringBuilder
在某一点可能相等而在之后不相等。这不是写hashCode()
或{{{ 1}}方法,因为equals
不是你写的类,所以它是内置于Java中的。)
答案 1 :(得分:1)
StringBuilder不会覆盖默认的hashCode()和equals()方法,因此它使用Object的实现 - 它基本上执行==检查。因为你没有使用完全相同的StringBuilder实例,所以contains()调用返回false。
因为类是final,所以你不能扩展它来添加equals()和hashCode(),所以你需要你自己的类。
答案 2 :(得分:1)
不要使用StringBuilder。使用字符串。