GirişConstructor ve yeni newHashMap arasındaki fark
şöyle
new HashMap<>(1000); //It will not allow you to put 1000 elements without rebalancing
HashMap.newHashMap(1000); // we will have 2048 buckets with threshold of 1334
Yani constructor ile verilen sayı eleman sayısı değil, istenilen bucket sayısı. Verilen sayı da ikini üssü olan en yakın bir sonraki sayıya yuvarlanıyor. Açıklaması
şöyle
It’s just the nearest number to the power of 2. So, if you pass 1000 to the constructor (new HashMap<>(1000)), 1024 buckets will be created.
Ancak problem şu. Bucket sayısı ve HashMap'in kendi içinde kullandığı threshold sayısı farklı şeyler. Dolayısıla threshold sayısı daha küçük bir şey ve biz 1000 tane elemanı hiç rebalancing olmadan ekleyebiliriz diye düşünürken aslında yanılıyoruz.
Bu yüzden yeni HashMap.newHashMap metodu var. Direkt istenilen eleman sayısını girdi olarak alıyor. Kendisi threshold ve bucket sayısını hesaplıyor