0

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

    }

}
4

3 回答 3

6

你不能StringBuilder在这里使用,因为StringBuilder使用引用相等,而不是内容相等。改用就好String了。

(这是有道理的,因为StringBuilder它是可变的,两个StringBuilders 可能在某一时刻相等,但在以后不相等。这不是写一个hashCode()equals方法的问题,因为StringBuilder它不是你写的类,它是内置在 Java 中的。)

于 2013-02-13T19:45:02.767 回答
1

StringBuilder 不会覆盖默认的 hashCode() 和 equals() 方法,因此它使用 Object 的实现 - 它基本上执行 == 检查。由于您没有使用完全相同的 StringBuilder 实例,因此 contains() 调用返回 false。

由于该类是最终类,因此您无法将其扩展为添加 equals() 和 hashCode(),因此您需要自己的类。

于 2013-02-13T19:45:11.417 回答
1

不要使用 StringBuilder。使用字符串。

于 2013-02-13T19:45:12.380 回答