Java 字符串哈希码缓存

标签 java string hashcode

String 不变性的优点之一是哈希码缓存以加快访问速度。

  • 在这种情况下,如何为具有相同哈希码的字符串处理缓存?
  • 在这种情况下它真的能提高性能吗?

最佳答案

In this case how cache is handled for string which has same hashcode?

缓存的是字符串的哈希码。它缓存在字符串本身的私有(private) int 字段中。不同的字符串可能具有相同的哈希码没有任何区别......因为哈希码存储在各自的 String 对象中。

(最重要的是具有相同字符序列(因此相等)的两个字符串具有相同的哈希码值。这是有保证的,因为 Java 字符串的哈希码算法是标准化的...并具有此属性。)

Does it really improve the performance in this case?

平均而言,是的,并且随着字符串长度的增加而增加。

一个体面的字符串哈希码算法需要查看字符串中的每个字符……否则相似的字符串最终可能会系统地映射到相同的哈希码(这很糟糕)。避免多次查看这 N 个字符是一个巨大的胜利。

缓存无济于事的唯一重要情况是:

  • 当大多数字符串哈希码只使用一次时,或者
  • 当大多数字符串非常短时。

(还有一个非常模糊的情况。如果 String 散列为 0,则缓存将无效。这是因为 String类在缓存字段中使用 0 表示哈希码尚未缓存。)

关于Java 字符串哈希码缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10576939/

相关文章:

Java正则表达式

java - 对于这个星号条形图java程序,有更简单的方法吗?

java - Java 对象的多个 HashCode

java - Is Class<T> immutable in Java,也就是 Class<T> 是 HashMap 的安全键吗?

java - Adobe CQ。获取当前页面路径

java - 通过比较两个查询参数来匹配wiremock请求

python - 编写一个名为拼写校正器的函数。

java - 是否可以将几个 StringArray 值写入一个 String 中?

java - 将字符串数组从某个参数连接在一起形成一个字符串?

java - 字符串池中的字符串创建时不允许重复,是否使用hashCode来检测是否重复?