Mengubah ukuran tabel array dalam implementasi HashMap
Ini pertanyaan sederhana, bagi mereka yang tahu implementasi internal HashMap :)
Ukuran awal 16 ember, faktor beban 0,75. Artinya ketika mendapat (perhatikan kata itu) 12, ukurannya berubah menjadi 32 ember.
Pertanyaan saya adalah apakah ukurannya berubah dari 16 menjadi 32 keranjang ketika mendapat 12 pasangan nilai kunci atau ketika mendapat 12 ember 'terisi'? Saya menanyakan hal itu karena bisa terjadi bahwa dari 16 keranjang tersebut, semua 12 pasangan nilai kunci dimasukkan ke keranjang yang sama. Dalam hal ini akan aneh untuk mengubah ukuran karena 15 lainnya benar-benar kosong.
Terima kasih, pendapat apa pun tentang ini akan dihargai :)
Jawaban
Seperti yang disebutkan di tautan ini .
Ini menyatakan bahwa pasangan nilai-kunci ke-12 dari hashmap akan mempertahankan ukurannya menjadi 16. Segera setelah elemen ke-13 (pasangan nilai-kunci) masuk ke dalam Hashmap, ukurannya akan meningkat dari default 2 ^ 4 = 16 keranjang menjadi 2 ^ 5 = 32 ember.
Independen di mana setiap kunci dimasukkan, ketika produk faktor beban dan kapasitas saat ini melebihi, tabel akan diubah ukurannya.
HashMap tidak peduli tentang berapa banyak keranjang yang digunakan sampai faktor beban tercapai, ia tahu bahwa kemungkinan tabrakan menjadi terlalu besar, dan peta harus diubah ukurannya. Padahal banyak tabrakan sudah terjadi.
Dari JavaDoc https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#put-K-V-
When the number of entries in the hash table exceeds the product of the load factor and the current capacity, the hash table is rehashed (that is, internal data structures are rebuilt) so that the hash table has approximately twice the number of buckets.
Jadi, HashMap mengubah ukuran jika memiliki 12 pasangan nilai kunci. Ini tidak aneh, karena setelah mengubah ukuran entri akan mengubah keranjangnya.