Tag: 码hashset

Java:修改更改哈希码的id

我使用HashSet,我需要修改一个对象的ID,但它改变了hashcode并破坏了HashSet和hashCode()方法的规则。 什么是最佳解决方案:从Set中删除对象并使用新ID添加对象,或者在Set中的每个对象中保留哈希码(例如在构造函数中生成),还是有其他方法可以解决此问题? 感谢帮助。 更新:我犯了错误:在对象中保留哈希代码很糟糕,因为在这种情况下,相等的对象可以有不同的哈希代码。

HashSet如何处理hashCode()?

我试图更深入地理解java.util.Collection和java.util.Map,但我对HashSetfunction有一些疑问: 在文档中,它说: 这个类实现了Set接口,由一个哈希表(实际上是一个HashMap实例)支持。 好的,所以我可以看到HashSet总是在后台运行Hashtable。 哈希表是一种结构,每次要向其添加新元素时都会请求键和值。 然后,基于密钥hashCode将值和密钥存储在桶中。 如果两个键的哈希码相同,则使用链表将两个键值添加到同一个桶中。 如果我说错了,请纠正我。 所以,我的问题是:如果一个HashSet总是有Hashtable在后台运行,那么每次我们使用HashSet.add()方法向HashSet添加一个新元素时,HashSet应该将它添加到它的内部Hashtable。 但是,Hashtable要求输入值和密钥 ,那么它使用什么密钥? 它是否仅使用我们尝试添加的值作为键,然后使用其hashCode? 如果我对HashSet实现说错了,请纠正我。 我的另一个问题是:一般来说,哪些类可以使用java对象的hashCode()方法? 我问这个是因为,在文档中,它说我们每次覆盖equals()方法时都需要覆盖hashCode()方法 。 好吧,这真的很有意义,但我怀疑的是,如果只是建议我们应该做的就是保持一切“美好而完美”(以这种方式),或者如果真的有必要,因为可能有很多Java默认类会不断使用对象的hashCode()方法。 在我的视野中,我看不到使用此方法的其他类而不是与集合相关的类。 非常感谢你们

hashcode()和equals()方法

所以我对hashcode()和equals()方法有疑问 假设我只是写了一个非常基本的程序来覆盖这两个方法 import java.util.*; class Employee { private String name; private int empid; public Employee(String name,int empid) { this.name=name; this.empid=empid; } public int getEmpid() { return empid; } public String getName() { return name; } public boolean equals(Object obj) { System.out.println(“equals has just been called…”); Employee e1=(Employee)obj; return ((name.equals(e1.name)) && (empid==e1.empid)); } public int hashCode() […]

HashSet包含自定义对象的问题

我的自定义类将由HashSet包含 public class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return “Person{” + “hashcode='” + this.hashCode() + ‘\” + “name='” + name + ‘\” + “, age=” + age + ‘}’; } @Override public boolean equals(Object o) { […]

java.util.HashMap和HashSet的内部实现

我一直在尝试理解java.util.HashMap和java.util.HashSet的内部实现。 以下是我脑海中浮现的疑惑: 什么是HashMap / HashSet中@Override public int hashcode()的重要性? 这个哈希码在内部使用在哪里? 我一般看到HashMap的键是一个像myMap这样的myMap 。 我可以将值映射到someObject (而不是String),如myMap吗? 我需要遵守的所有合同成功实现了什么? 提前致谢 ! 编辑: 我们是说密钥的哈希码(check!)是在哈希表中映射值的实际内容吗? 当我们做myMap.get(someKey); java在内部调用someKey.hashCode()来获取哈希表中要查找结果值的数字? 答:是的。 编辑2: 在java.util.HashSet ,从哪里为Hash表生成密钥? 它来自我们正在添加的对象,例如。 mySet.add(myObject); 那么myObject.hashCode()将决定它在哈希表中的位置? (因为我们不在HashSet中给出键)。 答:添加的对象成为关键。 价值是假的!

可变对象和hashCode

有以下课程: public class Member { private int x; private long y; private double d; public Member(int x, long y, double d) { this.x = x; this.y = y; this.d = d; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + x; result = […]