2016-08-31 9 views
0

以下のコードでDogオブジェクトをいくつか追加しました。 私はequalsメソッドとhashcodeメソッドを実装しています。 は、その後、私は、この出力にこのコードを実行するにはHashMapは期待された出力を与えません

5 
Third 

を取得していますDogオブジェクトの値を取得しようとしたとき、出力が

5 
null 

ここでコード

import java.util.HashMap; 

public class MapTest { 

    public static void main(String[] args) { 

     HashMap<Dog, String> map = new HashMap<Dog, String>(); 

     Dog d1 = new Dog("Tiger"); 
     Dog d2 = new Dog("Tommy"); 
     Dog d3 = new Dog("Jackie"); 
     Dog d4 = new Dog("Sheru"); 
     Dog d5 = new Dog("Rahul"); 

     map.put(d1, "First"); 
     map.put(d2, "Second"); 
     map.put(d3, "Third"); 
     map.put(d4, "Fourth"); 
     map.put(d5, "Fifth"); 

     System.out.println(map.size()); 
     System.out.println(map.get(new Dog("Jackie"))); 
    } 
} 

class Dog { 

    private String name; 

    public Dog(String name) { 
     this.name = name; 
    } 

    public boolean equals(Object obj) { 
     System.out.println("inside equals"); 
     if ((obj instanceof Dog) && this.name.equals(((Dog) obj).name)) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public int hashcode() { 
     return this.name.hashCode(); 
    } 
} 
+1

タイプミスの問題のような種類を避けるために、注釈@Overrideを使用https://docs.oracle.com/javase/tutorial/java/annotations/predefined.html –

+1

を見つけてください常に常に@Override – GhostCat

答えて

4

hashcode()方法がありますされます名前は間違っている必要があります。hashCode()

+1

オーバーライドされたメソッドに '@ Override'を付けると、コンパイラはこのエラーに気づくのを助けます。 – Zircon

+0

SlimuとZirconに感謝します –

0

あなたのhashcode()メソッド名が間違っていて、それをhashCode()にしてください。

詳細について

コード

class Dog { 

    private String name; 

    public Dog(String name) { 
     this.name = name; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     System.out.println("inside equals"); 
     if ((obj instanceof Dog) && this.name.equals(((Dog) obj).name)) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    @Override 
    public int hashCode() { 
     return this.name.hashCode(); 
    } 
} 
+0

ありがとう@NagenSahu。間違いは既に指摘されている –

関連する問題