Farklı koleksiyon kurucularına bakıldığında soru akla geliyor. ArrayList () neden başlangıç kapasitesi on olan boş bir liste oluşturur ve ArrayDeque () başlangıç kapasitesi 16 öğeyi tutmak için yeterli olan boş bir dizi deque oluşturur.
Farklı koleksiyon kurucularına bakıldığında soru akla geliyor. ArrayList () neden başlangıç kapasitesi on olan boş bir liste oluşturur ve ArrayDeque () başlangıç kapasitesi 16 öğeyi tutmak için yeterli olan boş bir dizi deque oluşturur.
Yanıtlar:
Çünkü ArrayDeque kapasitesi iki güç olmalı ve 16, en az 10 olan iki güç en küçük güç olmalıdır.
ArrayDeque, dairesel gibi davranan doğrusal bir dizinin etrafını sarmak için her yerde çok sayıda% işlem kullanmalıdır.
a % b
a & (b - 1)
sanki b
ikisinin gücü gibi ifade edilebilir . Bitsel AND büyük ölçüde daha hızlıdır, bu nedenle ArrayDeque'in kapasitesi iki güçle sınırlıdır. Tüm% işlemleri, uygulamadaki gerçek% yerine bit maskeleme ile gerçekleştirilir.
Bu nedenle, yeni HashMap'in asal sayı tablosu boyutlarını değil, ikisinin gücünü kullanmasının nedeni de budur, çünkü% işleminin çok sık ve bitsel olarak yapılması gerekiyor ve bu çok daha hızlı.
Eğer taban çizgisi 10 ise, iki sınırlama gücüne sahip yapılar 16 kullanmalıdır, çünkü en az 10 olan iki en küçük güçtür.
@ Esailija'nın cevabı bu özel durum için iyidir.
Daha genel olarak, birçok faktöre bağlı olan bir değiş tokuş. Birkaç örnek vereceğim:
Bu değiş tokuşların bir sonucu olarak, farklı toplama uygulamalarının farklı bir optimum varsayılan kapasiteye sahip olabileceği oldukça anlaşılabilir.