26 Şubat 2023 Pazar

HashMap.newHashMap metodu - Java 19 İle Geliyor

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 

Hiç yorum yok:

Yorum Gönder