Jon Skeet yanıtı iki senaryoyu ( null
değerle değil null
değ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.
Map
bu 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 .
Integer
Anahtar türü olarak bir anahtar kullanabilirsiniz .
Onun hashCode()
çarpışmalar benzersiz mümkün olmadığından yöntem çok etkilidir int
değ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 Map
kadar, 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 Effective
uncu maddeye başvurabilirsiniz .
İşte bu mesaj yolu ayrıntıları.