[英]Complexity of java hashmap for hash of string
我在看HashMap類中的Java源代碼。
final int hash(Object k) {
int h = 0;
if (useAltHashing) {
if (k instanceof String) {
return sun.misc.Hashing.stringHash32((String) k);
}
h = hashSeed;
}
h ^= k.hashCode();
那么,hashmapObject.put(“ somestring”)的時間復雜度是多少? 是O(1)還是O(n),其中n是字符串中的字符數。
在最壞的情況下(實際上,只有當哈希函數不好時,這種情況很少發生),哈希映射中put
方法的復雜度為O(N)
,因為盡管我們在鏈表的開頭添加了元素( O(1)
),但我們仍然需要遍歷bucket(鏈接列表)以確定該新元素是否已經存在。
更新:根據Peter Lawery在Java 8中的注釋,其O(log n)
。 這里描述了這種優化,但是簡而言之,當存儲桶的大小超過閾值時,樹形圖的即席實現用作存儲桶。 閾值由變量static final int TREEIFY_THRESHOLD = 8;
在HashMap.java
它通常是地圖的大小的O(1) 。 字符串的長度為O(N) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.