Aşağıda, Java 7'nin HashMap
uygulamasının (get()
yöntemi) kaynak kodu verilmiştir. Görebildiğiniz gibi, get yönteminde, anahtarları karşılaştırırken, anahtar listesindeki anahtarın aranıp aranmadığını belirlemek için her iki anahtarın 'hashcodes ve keys' değerlerini karşılaştırır. Bununla birlikte, eğer iki anahtar aynıysa, elbette ki, aynı karekoduna sahip olacaklardır ve eğer iki anahtar farklıysa, anahtarların değerlerini karşılaştırmak onları ayırmak için yeterlidir. Peki, neden Java HashMap
kaynak kodu, anahtarların 'karma kodları' eşitliği ile ilgileniyor?hashmap anahtarının karşılaştırması, neden hem anahtarın hashcode değerini hem de anahtarın değerini karşılaştırıyoruz
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}