什么是在Java 8字符串键可选择散列?(What is alternative hashing f

2019-06-27 00:59发布

Java的8对字符串键,提供可选择散列遇到了大量关键哈希代码碰撞时的性能。 任何人都可以解释是什么,以及它是如何工作的?

Answer 1:

从这封电子邮件的core-lib-devs@openjkd

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

代码的修改:

  • Murmur3: https://code.google.com/p/smhasher/wiki/MurmurHash3
  • althashing “7” webrev: http://cr.openjdk.java.net/~mduigou/althashing7/8/webrev/
  • althashing “8” webrev: http://cr.openjdk.java.net/~mduigou/althashing8/8/webrev/


Answer 2:

带来更多的相关性这个问题,可选择散列已经从JDK 8退房删除:

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

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

这是有趣的是,曾经在散列桶的项目数量的增长超过一定的阈值,即斗将使用条目的链接列表,以平衡树切换。

HashMap中的散列(对象键)的功能进行了修订,没有特殊处理,String对象如下:

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


Answer 3:

应当指出的是,转向MurmurHash3不会阻止DoS攻击: http://emboss.github.com/blog/2012/12/14/breaking-murmur-hash-flooding-dos-reloaded/



文章来源: What is alternative hashing for String keys in Java 8?