Jon Skeet yanıtı iki senaryoyu ( nulldeğerle değil nulldeğerle harita ) verimli bir şekilde ele alıyor.
Sayı girişleri ve verimlilik endişesi hakkında, bir şeyler eklemek istiyorum.
1.000 giriş ile bir HashMap var ve verimliliği artırmak için arıyorum. HashMap'e çok sık erişiliyorsa, her erişimde anahtar varlığını kontrol etmek büyük bir ek yüke yol açacaktır.
1.000 girişli bir harita çok büyük bir harita değildir.
Ayrıca 5.000 veya 10.000 girişe sahip bir harita.
Mapbu boyutlarla hızlı erişim sağlamak için tasarlanmıştır.
Şimdi, hashCode()harita tuşlarının iyi bir dağılım sağladığını varsayar .
IntegerAnahtar türü olarak bir anahtar kullanabilirsiniz .
Onun hashCode()çarpışmalar benzersiz mümkün olmadığından yöntem çok etkilidir intdeğerler:
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;
}
...
}
Anahtar için, Stringörneğin sıklıkla kullanılan başka bir yerleşik tür kullanmanız gerekiyorsa Map, bazı çarpışmalar olabilir, ancak 1 binden binlerce nesneye Mapkadar, String.hashCode()yöntem olarak çok azına sahip olmalısınız. iyi bir dağıtım sağlar.
Özel bir tür kullanırsanız, geçersiz kılın hashCode()ve equals()doğru şekilde ayarlayın ve genel olarak hashCode()adil bir dağıtım sağlandığından emin olun .
Atıfta bulunan 9 Java Effectiveuncu maddeye başvurabilirsiniz .
İşte bu mesaj yolu ayrıntıları.