【Java集合】為什么HashMap的長度是2的N次冪?


這個問題應該倒過來思考,HashMap的長度是2的N次冪,有什么優勢?

  在HashMap的putVal()方法中,為了確定插入元素在table[]數組中的下標位置,使用的與(&)運算來計算

  如下代碼

final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
                   boolean evict) {
        Node<K,V>[] tab; Node<K,V> p; int n, i;
        if ((tab = table) == null || (n = tab.length) == 0)
            n = (tab = resize()).length;
        //這里使用與運算來計算當前插入的元素的下標位置
        if ((p = tab[i = (n - 1) & hash]) == null)
            tab[i] = newNode(hash, key, value, null);
        else {


  (n - 1) & hash 這個操作如果在n為2的N次冪的情況下是等同於 hash % n 取余數的值

  至於為什么要使用與(&)運算呢:

    因為與運算的效率要高於hash % n取余的運算

  這也就解釋了為什么HashMap的數組長度是2的N次冪


免責聲明!

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



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