[英]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.