为什么我的类没有在Java HashSet的正常工作?
-
11-09-2019 - |
题
我的工作,涉及我使用一个类我做的,我将其命名为HashSet
的Test
的项目。我所定义的指出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()方法将使用对象实例标识(参考编号)。请参见这里关于这一主题的教程
不隶属于 StackOverflow