İlk içgüdüm, her anahtarın bir nesne olduğunu ve bir çoğaltmanın eklenip eklenmediğini belirlemek için kullanılan bir karma kodu vardır. Ancak, bunu destekleyecek hiçbir şey bulamıyorum. Birisi bunu söyleyen veya gerçek cevabı veren bir bağlantı sağlayabilir mi? Teşekkürler!Java, bir anahtarın bir Harita'da kopya olup olmadığını belirlemek için ne kullanır?
cevap
Map
arayüzü iki anahtar null
ise onlar kilit k
öyle ki key.equals(k)
var aksi takdirde tekrar eden belirtir, ardından iki kez mevcut. içerir Bkz veya buraya yöntemini olsun: Ancak
http://java.sun.com/javase/6/docs/api/java/util/Map.html#containsKey(java.lang.Object)
, nasıl o çeki gerçekleştirme hakkında gitmek Map
uygulanması kalmış ve HashMap
onunla kontrol edecek potansiyel anahtarları daraltmak için bir karma kodunu kullanacak equals
yöntemi. Pratikte, tipik bir karma tabanlı harita için, kopyaları kontrol etmek için bir harita, (muhtemelen bir miktar mod), bazı kodları değiştirir ve aynı büyüklükte aynı büyüklükte aynı kodu veren herhangi bir tuşla karşılaştırmak için equals
'u kullanır.
Anahtardaki equals() yöntemini kullanır. HashCode() yöntemi, yalnızca harita için tuşların verimli bir şekilde saklanmasına yardımcı olur.
Soruyu yanlış okuyun, ancak yukarıdaki kişinin cevabı doğrudur ve bağlantım nasıl belirlendiğine ilişkin cevabı verir (eşittir yöntemi). Bağlantıdaki içeriklere bakın ve yöntemleri alın.
Bir harita nasıl eklenir: Bir Harita'da yinelenen anahtar olamaz. Yinelenen bir anahtar bulursanız eski değeri yeni değerle değiştirir. İşte Harita Arabirimi için bir link. Ayrıca, kotaya (K tuşu, V değeri) bakarsanız, haritanın nasıl çalıştığını da açıklar. Umarım yardımcı olur.
Standart Java kitaplıklarında sağlanan bir arabirim olan java.util.Map
'a başvurduğunuzu farz ediyorum. Bir anahtarın çoğaltılıp çoğaltılmadığını belirleme yöntemi, özel uygulamaya kalmıştır. Bir java.util.HashMap
, örneğin equals
ve hashCode
kullanır. Tamamen farklı bir şey kullanan Haritanın kendi uygulamanızı yazabilirsiniz.
Burada bir kenar muhafazasına dikkat edin. Boş anahtarlar her zaman çoğaltılmaz. Aslında, null anahtarlar, Map uygulamaları arasında çok fazla hayal kırıklığına neden olacak şekilde ortaya çıktı (Consistency numaralı telefondaki mesajıma bakın).
Örneğin, boş anahtarları HashMaps'te Tamam, ancak doğal sıralamayı kullanan bir TreeMap'ta veya boş anahtarların yasak olduğu ConccurentHashMap'de yoktur. Buradaki sorun, boş bir anahtar kullanırsanız ve refactoring sırasında uygulamaları değiştirdiğinizde korkunç çalışma zamanı hataları ortaya çıkarırsa, yöntemlerinin çoğuna yakalanmamış istisnalar atmalarıdır.
Bundan daha iyi açıkladığınız için teşekkürler :) – kevindaub