2014-12-02 21 views
6

Lütfen nedenini açıklayınız. Ben googled ama iyi açıklanmış cevaplar bulamadım.Başlangıç ​​kapasitesi HashMap 16'da (iki güç) ve Hashtable 11'in başlangıç ​​kapasitesi neden (asal sayı)?

hashCode'unuz negatif olduğunda kepçe pozitifliği yapmak için midir?

static int indexFor(int h, int length) { 
    return h & (length-1); 
} 

length uzunluğunu geçerli:

+0

Neden bu ikisinin gücü? http://stackoverflow.com/questions/8352378/why-does-hashmap-require-that-the-initial-capacity-be-a-power-of-two – mishadoff

+0

@mishadoff İyi bağlantı, hatta primlerin nedenini anlıyor eski "Hashtable" da. –

+0

Bu mesajı göndermeden önce bu yazıyı okudum ama açıklamadan çok anlamadım – niiraj874u

cevap

7

HashMap için, Harita girdileri saklayan dizide endeksi (h anahtarın hashCode hesaplanır) bu şekilde hesaplanır dizi. length 2'nin güç değildi 2. length Eğer bir güç olduğunda

Bu yalnızca çalışır, sen return h % length az verimli bu kodu değiştirmek zorunda kalacak.

+0

Nice ... bu bilgiyi nereden aldınız? –

+0

@ w00te HashMap kodu kullanılabilir. Sadece kodlara bakmak zorundasın. – Eran

+0

@ w00te Kodu okuyabileceğiniz bir yer var - http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashMap.java – Eran