final node resize()
// newcap = oldcap * 2 左移1位相當於原值*2 並且原長度大於16
else if ((newcap = oldcap << 1) < maximum_capacity &&
oldcap >= default_initial_capacity)
newthr = oldthr << 1; // double threshold
}// hashmap有參構造方法(即傳入initcapacity)此時原長度為0且閾值不為0(hashmap懶載入)
else if (oldthr > 0) // initial capacity was placed in threshold
newcap = oldthr;
// 無參構造方法生成,使用預設值作為容量和閾值 16 0.75
else
// 定義新的閾值
if (newthr == 0)
threshold = newthr;
@suppresswarnings()
// 建立新的node陣列
node newtab = (node)new node[newcap];
// 將類例項中的陣列引用位址換為新的陣列位址
table = newtab;
if (oldtab != null)
// 判斷hash與原長度位運算得到最高位的值為1
// 表示保留在新位置(原位置+原長度)
else
} while ((e = next) != null);
// 將原位置資料落地到新陣列中
if (lotail != null)
// 將新位置資料落地到新陣列中
if (hitail != null) }}
}}
return newtab;
}
對於jdk1.8中採用新的擴容方式(為什麼jdk1.7中採用了重新計算,jdk1.8中採用原位置和新位置(原位置+原長度)),可以參考:這篇文章寫得非常詳細 jdk1 8常用總結
1.查詢集合裡的第乙個物件 filter 例 查詢listlist 中username為小明的物件t list.stream filter findfirst 1 list.stream filter e 小明 equals e.getusername findfirst 2.查詢滿足條件的物件,並...
用jdk1 8還是用jdk11
2020年年初,公司cto要求我們採用最新版本jdk,甚至直接使用最新版kotlin。前兩天 2020年12月 我把公司 公升級到了jdk11 lts版本,但不是最新版jdk。如果不搞rocketmq,不會發現什麼問題,而且會感覺這是乙個很好的改進,編碼寫法改進了,甚至效能提高了 然後,一搞rock...
Java 方法引用(JDK1 8)
引用 物件引用,物件引用的本質在於為乙個物件起別名,即 不同的棧記憶體可以同時指向同一塊堆記憶體空間。與物件引用類似的情況是,方法引用,即 為方法設定別名。在jdk 1.8之中針對於方法引用提供有如下的四種形式 引用靜態方法 類名稱 static方法名稱 引用某個物件的方法 例項化物件 普通方法 引...