簡體   English   中英

使用TreeNode而不是鏈表的Java 8哈希圖實現

[英]Java 8 hashmap implementation using TreeNode instead of linkedlist

根據這篇文章:

http://coding-geek.com/how-does-a-hashmap-work-in-java/

Java 8 hashmap使用treenode而不是鏈表(如Java 7中)作為數組的元素。

TreeNodes的特殊屬性是:如果元素數量很少,則充當鏈表;如果元素數量很多,則充當紅黑樹。 (由於涉及紅黑樹的操作為log(n))。

但是,這是否不要求密鑰具有可比性或密鑰的某種順序存在?

這是在Java 8 hashmap中強制執行的嗎? 如果鍵是可比較的(鍵的順序存在),它將僅使用紅黑樹嗎?

如果鍵是可比較的(鍵的順序存在),它將僅使用紅黑樹嗎?

不,當HashMap很小時,所有沖突都將解析為LinkedList 看一下來源:

/**
* Replaces all linked nodes in bin at index for given hash unless
* table is too small, in which case resizes instead.
*/

if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st, TREEIFY_THRESHOLD = 8
    treeifyBin(tab, hash);
    break;

當達到閾值時, treeifyBin()方法會將所有沖突轉換為treeifyBin()圖。

但是,這是否不要求密鑰具有可比性或密鑰的某種順序存在?

您可以將任何鍵放入哈希映射。 根據Java文檔null是有效的鍵,並且由於null是不可Comparable ,所以鍵不必是Comparable 如果鍵不是Comparable鍵,則將其作為LinkedList put (如果數組已轉換為樹,則通過內部表put )。

暫無
暫無

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

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