我想用500個元素初始化一個HashMap,全部設置爲零。我嘗試使用Lambda forEach循環,但即使完成了lambda循環,映射的大小仍然爲零。 我很想知道內存什麼時候分配給put操作。內存什麼時候分配給HashMap元素?
Map<Integer, Integer> map = new HashMap<>(500);
map.keySet().forEach(i -> map.put(i, new Integer(0)));
System.out.println("Size of the HashMap using Lambda forEach loop: " + map.size());
for (int i=0; i < 500; i ++){
map.put(i,0);
}
System.out.println("Size of the HashMap using regular for loop: " + map.size());
輸出:
Size of the HashMap using Lambda forEach loop: 0
Size of the HashMap using regular for loop: 500
PS:我知道有使用Java8另一種方法爲流將元素添加到HashMap的,但我更想知道put操作。
您正在迭代地圖的按鍵,但尚未將任何東西放入地圖。所以keySet是空的。什麼令人驚訝? –
如果地圖不是空的,在迭代時調用'put'必須被認爲是中斷的。另外,新的Integer(0)'有什麼意義? – Holger
注意HashMap中的鍵可以是任何整數,不只是0..N-1;例如他們完全可以是1000100 1000503 1001002 1001501等等。如果你的密鑰總是0..N-1,你可以使用(內置)數組或ArrayList來獲得比HashMap更好的效率。 –