java - Java 默认使用什么哈希函数,我们可以覆盖默认行为吗?

标签 java hash

我正在浏览 Introduction of Algorithms by Cormen et al视频,它讨论了几个散列函数。我想知道 Java 默认使用什么哈希函数?对于用作键的不同类型的对象,哈希函数实际上是否不同? Collections 框架中是否有一个 api 可以让我们编写自己的哈希算法?

最佳答案

Java 中的每个对象都有一个返回散列的public int hashCode() 方法。每个对象都可以通过覆盖该方法以自己的方式自由实现它。如果该方法未被覆盖,则 default Object#hashCode method被使用。

您可以查看各种对象的源代码,了解它们在 JDK 中是如何实现的。这是 String's hashCode例如(第 1494 行)。

某些集合可以在对象的 hashCode 方法之上添加额外的哈希层。例如,当对象的 hashCode 分布不均时,HashMap 会这样做以提高性能。

关于java - Java 默认使用什么哈希函数,我们可以覆盖默认行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11991589/

相关文章:

java - 如何在 Java 中运行 .reg 文件

java - 选择单选按钮后启用复选框

c - 散列密码并使用 C 中的签名进行检查

ruby - 将 Yaml 转换为 Ruby 哈希时,如何区分具有相同键的条目

c - (几乎)用于开关的非冲突简单哈希函数

javascript - Director.js 和 Turbolinks - 更改窗口哈希并使用然后返回

java - 列表、基本类型和性能

Apple PropertyList-1.0.dtd 的 java 库

Java方法扩展而不是覆盖

javascript - 哈希德 : ReferenceError: require is not defined