Jawaban Jon Skeet membahas dengan baik dua skenario (peta dengan nullnilai dan bukan nullnilai) 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.
Mapdirancang untuk melakukan pengambilan cepat dengan dimensi seperti itu.
Sekarang, diasumsikan bahwa hashCode()kunci peta menyediakan distribusi yang baik.
Jika Anda dapat menggunakan Integerjenis kunci sebagai, lakukan.
Its hashCode()metode ini sangat efisien karena tabrakan tidak mungkin untuk unik intnilai-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 Stringmisalnya yang sering digunakan Map, Anda mungkin memiliki beberapa tabrakan tetapi dari 1.000 hingga ribuan objek di Mapdalamnya, 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 Effectivemerujuknya.
Inilah pos yang merinci caranya.