如果我在覆盖 hashCode() 函数时 return 常量整数会发生什么?
What happens if I return constant integer when overriding hashCode() function?
当我在下面的语句中使用hashCode()
方法时:
System.out.println(obj.getClass().getName() + "@" +
Integer.toHexString(System.identityHashCode(obj)));
我得到这样的输出:
"Contact@29453f441"
每个对象都是独一无二的。覆盖 hashCode()
的效果是什么?
来自系统文档class
public static int identityHashCode(对象 x)
Returns 与默认方法 hashCode() 返回的给定对象相同的哈希码,无论给定对象的 class 是否覆盖 hashCode()。空引用的哈希码为零。
所以即使 hashcode() 被覆盖,它也不应该影响它。
你会失去 hashmap 提供的任何性能,hashmap 可以在 O(1) 时间内从具有不同哈希的对象的集合中检索项目,这正是我们使用 HashMap 时想要实现的。
引用另一个问题:
When two unequal objects have the same hash value, this causes a collision in the hash table, because both objects want to be in the same slot (sometimes called a bucket).
如果您不使用 hashmap 或其他依赖对象哈希码的算法,则不会出现问题。
至于比较,它们将通过equals()
进行区分。
当我在下面的语句中使用hashCode()
方法时:
System.out.println(obj.getClass().getName() + "@" +
Integer.toHexString(System.identityHashCode(obj)));
我得到这样的输出:
"Contact@29453f441"
每个对象都是独一无二的。覆盖 hashCode()
的效果是什么?
来自系统文档class
public static int identityHashCode(对象 x)
Returns 与默认方法 hashCode() 返回的给定对象相同的哈希码,无论给定对象的 class 是否覆盖 hashCode()。空引用的哈希码为零。
所以即使 hashcode() 被覆盖,它也不应该影响它。
你会失去 hashmap 提供的任何性能,hashmap 可以在 O(1) 时间内从具有不同哈希的对象的集合中检索项目,这正是我们使用 HashMap 时想要实现的。
引用另一个问题:
When two unequal objects have the same hash value, this causes a collision in the hash table, because both objects want to be in the same slot (sometimes called a bucket).
如果您不使用 hashmap 或其他依赖对象哈希码的算法,则不会出现问题。
至于比较,它们将通过equals()
进行区分。