2016-04-12 27 views
1

Örnek

LinkedHashMap<Long, String> myHashMap = new LinkedHashMap<>(); 
myHashMap.put(new Long(1), "A Value"); 

Sorular

  1. bir başvuru veya bir kopyası anahtarı mı?
  2. String aValue = myHashMap.get(new Long(1)); yazarsam, "A Value" geri alır mıyım? Ya da farklı bir nesne (referans) için sorguladım ve bu yüzden bir hata alacağım?
+1

Denediğinde ne oldu? HashMap'in javadocu ne diyor? – Savior

+0

[javadoc] (https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html) 'nin 5. paragrafı ("Birçok eşleştirmeler ...") hakkında bir şey söylüyor hashCode() ', ama ihtiyacım olan yanıtı tam olarak alamıyorum. Okumama/odaklanmam gereken bölümü işaret edebilir miyiz? – sargas

+0

@sargas Sorunuz 'hashCode'den bahsetmiyor. 'HashCode', girdinin saklandığı dizinin dizinini belirlemek için kullanılır. Çok fazla girişte "hashCode" aynıysa, performansı yavaşlatır. –

cevap

3
  1. anahtar aynı örneği için bir başvurudur. Long
    • equals() (return value == obj.longValue())

      geçersiz çünkü
    • Sen,

    • hashCode() (return Long.hashCode(value)) "A Value" geri alacak.
+1

Cevabınız bana çok anlayışlı. Bu bilgiyi bulmak için [Map Interface'in belgelerini] (https://docs.oracle.com/javase/8/docs/api/java/util/Map.html) okumak zorunda kaldım (HashMap veya LinkedHashMap yerine) olanlar). – sargas

5
  1. haritası argüman olarak geçirilen nesneye bir referans bir kopyasını saklar. Nesnelerin bir kopyası yapılmaz.
  2. Evet, belgelenen "A Değeri" geri alacaksınız. Bir Harita, anahtarlarını eşittir(), == (IdentityHashMap hariç) ile karşılaştırır. Bunu oldukça kolay bir şekilde test edebilirsin, BTW.
+0

Harita, nesnenin "hashCode()" değerini saklamıyor mu? Ve sonra hashları == ile karşılaştırın? Eğer eşittir() uygularsanız, bu özel sebeple hashCode'u her zaman uygulamanız gerekiyor – Alex

+0

Evet, öyle. Fakat eşit hashCodes nesneleri eşit olduğu anlamına gelmez. Sonunda, anahtarlar eşittir() ile karşılaştırılır. Benim amacım, anahtarların '==' olup olmadığını, ancak anahtarların eşit olup olmadığını test etmemesidir. –

İlgili konular