java - Java 中的 String.hashCode

标签 java

Possible Duplicate:
why do String.hashCode() in java is not implemented in a way with less conflicts?

对于非加密哈希,Java 的 String.hashCode() 是如何实现的?执行?

我主要担心碰撞。

谢谢。

最佳答案

你似乎误解了什么.hashCode()是关于 Java 的,更具体地说,是 .equals()/.hashCode()java.lang.Object 指定的契约(Contract).

对任何人来说,物质契约的唯一部分是,如果两个对象在.equals()方面是相等的。 ,那么它们必须具有与 .hashCode() 返回的相同的哈希码。 。 该契约(Contract)没有其他义务

因此,编写自定义 .hashCode() 是完全合法的。像这样的实现,尽管这并不像人们能想到的那么理想:

@Override
public int hashCode()
{
    // Legal, but useless
    return 42;
}

当然,JDK开发人员永远不会那么厚,并且.hashCode()内置类型(包括 String )的实现已经足够好,您甚至不需要担心冲突。即使如此,这种实现很可能会因一种 JDK 实现而异,其“加密值(value)”也将有所不同。

但这不是重点。

要考虑的最重要的事情是 .hashCode()与密码学完全无关。它唯一的义务是遵守java.lang.Object定义的契约(Contract)。 .

关于java - Java 中的 String.hashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14167601/

相关文章:

Java 的 HttpCookie 类

java - 如何更改 JComboBox 中的箭头样式

混合 AWT 和 SWT 时出现 Java UnsatisfiedLinkError?

java - java中的包装类是一个以原始数据类型为成员的类吗?

java - 无法从另一个java项目打开.jar可执行文件

java - 在 WebLogic Server : 12. 2.1.3.0 中部署应用程序时出现错误,原因是 : java. lang.ClassNotFoundException:WebLogic_12

java - RecyclerView适配器连接错误: no adapter attached

java - java中的额外空格

java - response.sendredirect() 改变方法类型

java - 具有两种 O(1) 查找方式的数据结构。哈希表?