Java 8 中字符串键的替代哈希是什么?

2022-09-04 19:23:40

Java 8 为 String 键提供了替代散列,以便在遇到大量键散列代码冲突时提高性能。任何人都可以解释这是什么以及它将如何工作?


答案 1

为了与这个问题更加相关,替代散列已从 JDK 8 中删除。退房:

http://docs.oracle.com/javase/8/docs/technotes/guides/collections/changes8.html

http://openjdk.java.net/jeps/180

有趣的是,一旦哈希存储桶中的项目数增长到超过某个阈值,该存储桶将从使用条目链接列表切换到平衡树。

HashMap 中的 hash(Object key) 函数已修订为以下函数,对 String 对象没有特殊处理:

static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

答案 2

这封电子邮件中:core-lib-devs@openjkd

  • 引入了一个新的接口Hashable32。
  • Hashable32 提供了一个 hash32()
  • 字符串实现 Hashable32 和 hash32() 方法
  • HashMap等人识别String并调用hash32()而不是hashCode()

代码的修订: