我设置整数对类如下:
public class pair{
int a;
int b;
pair(int p,int q){
this.a=p;
this.b=q;
}
}
当我将它们添加到hashset中时,没有重复:
HashSet<pair> set=new HashSet<pair>();
pair temp=new pair(3,5);
set.add(temp);
pair temp1=new pair(3,5);
set.add(temp1);
for(pair p:set){
System.out.println(p.a+" "+p.b);
}
但它给了我这样的输出:
3 5
3 5
我应该编辑什么以使哈希集中没有重复项?
您应该覆盖类的hashCode
和equals
方法才能使其工作。这样做是为了尊重Java中对象的hashCode和equals契约。
您需要重写对类的equals方法,以专门查看每一对并查看它们是否匹配。
编辑:是,并且hashcode方法也必须被重写
您必须做两件事:
equals()
hashCode()
正如hashCode()的javadoc告诉您的,它必须与equals()一致,即如果两个对象相等,它们应该具有相同的hashCode。对于两个不相等的对象,可以使用相同的哈希代码,
像这样的东西:
public class pair{
int a;
int b;
pair(int p,int q){
a=p;
b=q;
}
public boolean equals(Object o) {
if (o instanceof Pair) {
Pair p = (Pair)o;
return p.a == a && p.b == b;
}
return false;
}
public int hashCode() {
return new Integer(a).hashCode() * 31 + new Integer(b).hashCode();
}
}
我有一个Employee类有2个属性id和name。我正在重写hashcode和equals方法,如下所示。 Employee.java: 现在我有了一个测试类,我正在创建一个名为“Chris Gayle”的employee类的对象,并将其添加到HashSet中。之后,我将这个现有的employee对象的名称修改为“Kieron Pollard”,并将这个修改后的employee对象再次添加到Ha
问题内容: 基本类型(例如int)的哈希码是什么? 例如,假设num是一个整数。 问题答案: 对于一个最自然的选择是使用本身。一个更好的问题是,用什么的的,因为它不适合的尺度的哈希码。您的最佳解决方案以及所有相关问题将是有效的Java。
我想获取一个Javascript对象并将其转换为哈希数组。 以下操作仅获取对象的一个元素并将其转换为数组: 返回: 但是,当我试图创建散列元素来组成数组时,出现了一个错误: 返回: 我做错了什么?
问题内容: 我正在尝试创建一个哈希表,如下所示: 但是我在int和byte上都收到一个错误,说“此令牌后应有尺寸”。 如果我使用类似: - 一切都很好。有人可以解释为什么吗? 谢谢。 问题答案: 在Java的核心集合类中,您只能存储引用类型(扩展java.lang.Object的对象)。您 不能 存储诸如和的基元。请注意,like数组不是原始数组,而是引用类型。 如@Giuseppe所述,您可以这
如果我在hashmap中输入一个键和值,并且基于键hashcode生成的索引大于15,并且映射大小仍然小于阈值(即12),会发生什么? 提前谢谢。
问题内容: 我这里有使用struts2-jquery插件的代码 当我单击其内容时,URL会更改为类似的内容,而URL中没有任何变化。它仍然保持不变,我想要的是当我单击链接时会发生类似的情况。当我运行代码时,锚标记被翻译成这样 有了给定的内容,我该如何在网址中添加哈希? 问题答案: 这是一个工作示例(不考虑Struts2):