-2
class EventManager{
    public String unique_ID;
    public List<Object> infoList;

    public EventManager(String ID, List<Object> infoList){
        this.unique_ID = ID;
        this.infoList = infoList;
    }
}

このクラスをマップ キーとして使用する場合、独自の hashcode および equal() メソッドを実装する必要がありますか?

必要な場合は、unique_ID をハッシュするだけで十分ですか? ありがとう。

ありがとう。

4

3 に答える 3

1

独自のハッシュコードを定義しない場合は、オブジェクトのアドレスが使用されると思います。したがって、同じ ID で 2 つのインスタンスを作成すると、それらは同じバケットにハッシュされません。おそらく、同等性のために id を使用したいと思うでしょう。補足として、不変性を保証できない限り、等価またはハッシュで List を使用しないでください。

デフォルトの .equals と .hashCode はクラスでどのように機能しますか?

于 2013-04-14T22:12:59.323 に答える
0

hashCodeと equals の値をオーバーライドして異なる を与える場合を除きますbehaviour

hashCodeそうでない場合は、デフォルトを使用するだけで、JVM によって多かれ少なかれ保証される方法で、異なるオブジェクトごとに異なる があります。

equalsたとえば、特定の条件が満たされた場合 (たとえば、単に同じである場合) に 2 つのオブジェクトが同じであると言いたい場合にのみ、 をオーバーライドする必要がありますunique_ID

overrideを行う場合は、オブジェクト コントラクトを尊重するために をオーバーライドequalsする必要があります。hashCode

クラス Object の equals メソッドは、オブジェクトに対して最も識別可能な等価関係を実装します。つまり、null 以外の参照値 x と y の場合、このメソッドは、x と y が同じオブジェクトを参照している (x == y の値が true) 場合にのみ true を返します。

通常、このメソッドがオーバーライドされるときは常に、hashCode メソッドをオーバーライドする必要があることに注意してください。これは、等しいオブジェクトには等しいハッシュ コードが必要であるという、hashCode メソッドの一般的な契約を維持するためです。

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)

于 2013-04-14T22:04:17.077 に答える