Jawaban Jon Skeet membahas dengan baik dua skenario (peta dengan null
nilai dan bukan null
nilai) dengan cara yang efisien.
Tentang entri angka dan masalah efisiensi, saya ingin menambahkan sesuatu.
Saya memiliki HashMap dengan mengatakan 1.000 entri dan saya sedang mencari cara untuk meningkatkan efisiensi. Jika HashMap sedang diakses sangat sering, maka memeriksa keberadaan kunci di setiap akses akan menghasilkan overhead yang besar.
Peta dengan 1.000 entri bukan peta besar.
Serta peta dengan 5.000 atau 10.000 entri.
Map
dirancang untuk melakukan pengambilan cepat dengan dimensi seperti itu.
Sekarang, diasumsikan bahwa hashCode()
kunci peta menyediakan distribusi yang baik.
Jika Anda dapat menggunakan Integer
jenis kunci sebagai, lakukan.
Its hashCode()
metode ini sangat efisien karena tabrakan tidak mungkin untuk unik int
nilai-nilai:
public final class Integer extends Number implements Comparable<Integer> {
...
@Override
public int hashCode() {
return Integer.hashCode(value);
}
public static int hashCode(int value) {
return value;
}
...
}
Jika untuk kuncinya, Anda harus menggunakan tipe bawaan lain seperti String
misalnya yang sering digunakan Map
, Anda mungkin memiliki beberapa tabrakan tetapi dari 1.000 hingga ribuan objek di Map
dalamnya, Anda harus memilikinya sangat sedikit sebagai String.hashCode()
metode memberikan distribusi yang baik.
Jika Anda menggunakan jenis khusus, timpa hashCode()
dan equals()
dengan benar dan pastikan keseluruhan yang hashCode()
menyediakan distribusi yang adil.
Anda dapat merujuk ke item 9 dari Java Effective
merujuknya.
Inilah pos yang merinci caranya.