hashmap時間復雜度


理想情況下HashMap的時間復雜度為O(1),因為對於內存來說,訪問任何地址的時間是一樣的,即時間極短,相當於可以同時訪問到所有地址。

而在時間復雜度為O(1)時,需要很大的內存空間,所以必須要對內存和時間進行取舍。

咋取舍呢,hashmap在初始化的時候有倆值,初始大小和負載因子,默認是16和0.75

大小不用解釋,負載因子就是一個小數,擴容的時候用的,在put的時候,hashmap就檢查一下自己的大小,是不是大於16x0.75(大小x負載因子),如果是,就擴容,擴容到2^n,為啥是這個呢,我看了很多資料,

hash值要進行取余運算,而數學證明,hash%(2^n)=hash^(2^n-1),為了效率,就采用了2倍的擴容。ps:^為異或,2^n為2的n次方

面試題:初始構造器設置大小為25,hashmap實際大小是多少?

實際是64,首先,找到比25大的2^n,是32,負載因子為0.75,則能裝24個,25>24,觸發擴容,為64.

下面是hash運算的源碼

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM