1

こんにちは、hashcode() と equals() メソッドの目的を学習しようとしています。次のプログラムを試しました。

import java.util.HashMap;

public class LearnHascode {

public String name;
public int age;
LearnHascode(String na)
{
    name = na;
}
public int hashCode()
{
    return name.hashCode();
}
public boolean equals(LearnHascode obj)
{
    return this.name.equals(obj.name);
}
public static void main(String[] args)
{
    HashMap h = new HashMap();
    LearnHascode ob1 = new LearnHascode("Prabha");
    LearnHascode ob2 = new LearnHascode("Prabha");

    h.put(ob1, v1);
    h.put(ob2, v2);


    System.out.println(h);
    System.(h.out.printlncontainsKey(new LearnHascode("Prabha")));

}

}

出力:

{hash.LearnHascode@8ef7bdfc=Two, hash.LearnHascode@8ef7bdfc=one}
false

私には2つの疑問があります:

1)2つのオブジェクト(ob1とob2)のhascodeが同じであるため、HashMapには1つのエントリが含まれると思いました。HashMap に 2 つのエントリがある理由を説明できる人はいますか?

2) System.(h.out.printlncontainsKey(new LearnHascode("Prabha"))); false を返すのはなぜですか?

4

2 に答える 2

7

あなたのequals()方法は間違っています。これはHashMap. への引数equals()は常にObject; です。それが何であるかを確認しObject、メソッドの本体にキャストする必要があります。

このhashCode()値は、オブジェクトをカテゴリに分類するためにequals()使用されますが、2 つのオブジェクトが実際に同じかどうかを判断するために使用されます。作業を開始するには、これらのメソッドを両方とも正しく定義する必要がありますHashMap

于 2012-05-30T03:39:03.040 に答える