我的工作,涉及我使用一个类我做的,我将其命名为HashSetTest的项目。我所定义的指出HashSet像这样:

HashSet<Test> t = new HashSet<Test>();
t.add(new Test("asdf", 1));
t.add(new Test("hello", 2));
t.add(new Test("hello", 3));

我尝试使用

t.contains(new Test("asdf", 1));

但它返回false。然而,当我使用HashSet<Character>它似乎很好地工作。我试图重写以前equals声明,但没有奏效。我试过只留下equals,但我仍然有false。我需要知道我在做什么错?

另外,我没有编辑该散列函数,我只改变Test.equals(对象O)。这是一个简单的项目,因为Java文档指出它使用o.equals(本),我想我就不会去。

有帮助吗?

解决方案

您可能需要过载哈希码()方法为好。

其他提示

HashSet.add(Object data)不等于HashSet.add(new Test(String, int))

尝试使用HashSet.add(new Test("asdf", 1));。并从hashCode()方法覆盖。请问您的代码编译?

您的代码甚至不会编译...

HashSet的不具有接受两个参数的加载()方法。

如果你的意思

t.add(new Test("asdf", 1));

在代替

t.add("asdf", 1);

一定的哈希码和等于测试类的方法被适当地实现,如前所述。

在内部哈希表将使用对象#hashCode()方法,哈希和铲斗的对象和对象#equals()方法来测试是否相等,如果有冲突的hashCode。你需要确保你的测试类提供适当的实现(overrrides)这些,你的情况,以测试字符串是否相等,否则默认对象#equals()方法将使用对象实例标识(参考编号)。请参见这里关于这一主题的教程

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top