78得票9回答
为什么String的hashCode()方法不缓存0?

我注意到在Java 6的String源代码中,hashCode只缓存非0值。以下代码片段展示了性能差异: public class Main{ static void test(String s) { long start = System.currentTimeMilli...

77得票10回答
可变哈希表键是一种危险的做法吗?

在哈希表中使用可变对象作为键是不好的做法吗?当你尝试使用已经被修改以改变其哈希码的键从哈希表中检索值时会发生什么? 例如,给定以下代码:class Key { int a; //mutable field int b; //mutable field public ...

77得票4回答
Objects.hash()与Objects.hashCode(),需要澄清的区别。

自Java 7以来,我们拥有了o.hashCode(); Objects.hashCode(o); Objects.hash(o); 前两个与空值检查大致相同,但最后一个是什么?当提供单个对象引用时,返回的值不等于该对象引用的哈希码。为什么会这样?我的意思是,我们不需要三个做同样事情的方法,我...

75得票10回答
在子类中覆盖equals()和hashCode()方法…考虑超类字段

在子类中覆盖 equals() 和 hashCode() 方法时,是否有特定的规则考虑继承字段?知道有很多参数:继承字段是私有的/公共的,有/没有getter等。 例如,Netbeans 生成的 equals() 和 hashCode() 不会考虑父类的字段... new HomoSa...

74得票5回答
JVM如何确保System.identityHashCode()永远不会改变?

通常,默认的Object.hashCode()实现是对象在内存中分配的地址的某个函数(尽管这并不是Java语言规范所要求的)。鉴于虚拟机在内存中移动对象,为什么System.identityHashCode()返回的值在对象的生命周期中从不改变呢? 如果它是一个“一次性”计算(对象的hash...

72得票5回答
在HashMap中使用字符串键是个不好的主意吗?

我知道String类的hashCode()方法不能保证为不同的字符串生成唯一的哈希码。我看到很多使用将String键放入HashMap中的用法(使用默认的String hashCode()方法)。如果一个map put替换了以前用真正不同的String键放在地图上的HashMap条目,这种用法...

72得票6回答
我应该在JPA实体中编写equals()和hashCode()方法吗?

我想检查一个实体是否在另一个实体的集合成员(@OneToMany或@ManyToMany)中:if (entity2.getEntities1().contains(entity1)) { }

70得票6回答
什么是用于哈希码计算的合适质数?

Eclipse 3.5有一个非常好的功能,可以生成Java hashCode()函数。例如,它会生成以下内容(稍微缩短): class HashTest { int i; int j; public int hashCode() { f...

70得票3回答
“hashCode”的默认实现是什么?

如果一个类没有重写hashCode方法,那么默认实现的hashCode是什么?

64得票12回答
在接口中的toString()、equals()和hashCode()

我有一个接口,里面有一堆需要被实现的方法,方法名并不重要。 实现这个接口的对象通常被放在集合中,并且还有一个特殊的toString()格式,我希望它们使用这个格式。 所以,我认为将hashCode()、equals()和toString()放入接口中会更加方便,以确保我记得为它们覆盖默认的...