這個問題應該倒過來思考,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次冪
