簡體   English   中英

什么是Java 8中String鍵的替代散列?

[英]What is alternative hashing for String keys in Java 8?

Java 8為String鍵提供備用散列,以在遇到大量密鑰散列碼沖突時提高性能。 任何人都可以解釋它是什么以及它將如何工作?

為了更好地解決這個問題,已從JDK 8中刪除了替代哈希。檢查:

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

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

有趣的是,一旦哈希桶中的項目數量增長超過某個閾值,該桶就會從使用鏈接的條目列表切換到平衡樹。

HashMap中的哈希(Object key)函數已修改為以下內容,對String對象沒有特殊處理:

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

來自core-lib-devs@openjkd 這封電子郵件

  • 引入了一個新的接口Hashable32。
  • Hashable32提供方法hash32()
  • String實現Hashable32和hash32()方法
  • HashMap等識別String並調用hash32()而不是hashCode()

代碼的修訂版:

值得注意的是,轉向MurmurHash3不會阻止DoS攻擊: http//emboss.github.com/blog/2012/12/14/breaking-murmur-hash-flooding-dos-reloaded/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM