为什么我的类不能在Java哈希集中正常工作?

为什么我的类不能在Java哈希集中正常工作?,java,collections,hashset,Java,Collections,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)); 但它返回false。然而,当我使用HashSet时,它似乎工作得很好。我试图重写前面的equals声明,但没有成功

我正在从事一个项目,其中涉及到我使用一个类的
哈希集
,我将其命名为
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));
但它返回
false
。然而,当我使用
HashSet
时,它似乎工作得很好。我试图重写前面的
equals
声明,但没有成功。我试着让
equals
单独呆着,但还是得到了
false
。我需要知道我做错了什么


另外,我没有编辑哈希函数,我只更改了Test.equals(objecto)。这是一个简单的项目,因为java文档声明它使用o.equals(这个),我想我不必这样做。

您可能还需要重载hashCode()方法。

在内部,哈希表将使用Object#hashCode(),对对象进行散列和存储,并使用Object#equals()测试是否存在哈希代码冲突。您需要确保您的测试类提供适当的实现(超越这些实现),在您的情况下,测试字符串相等性,否则默认的Object#equals()方法将使用objects实例标识(ref id)。有关此主题的教程,请参见。

HashSet.add(对象数据)
不等于
HashSet.add(新测试(字符串,int))


尝试使用HashSet.add(newtest(“asdf”,1))。并通过
hashCode()
方法进行重写。您的代码可以编译吗?

您的代码甚至无法编译

HashSet没有接受两个参数的add()方法

如果你是说

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

t.add("asdf", 1);

如前所述,确保测试类的hashcode和equals方法得到了正确实现。

能否发布测试类的参数,特别是equals和hashcode方法。
HashSet.add
只接受一个参数,而不是两个参数。您的第二个代码块包含语法错误。此外,HashSet的要点是您的HashSet将包含Test的实例。所以它应该是t.add(新测试(“asdf”,1));请发布可编译的代码示例。对我来说,谜团在于
HashSet
这是如何工作的,事实上,它是如何编译更少的工作的。这应该是“将”,而不是“可能”。
t.add("asdf", 1);