使用HashSet测试包含

时间:2013-02-13 19:43:51

标签: java hashset

我正在用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));

    }

}

3 个答案:

答案 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。使用字符串。