-1

重複の可能性:
ハッシュコードと等号

hashcode私は、and equals とその関係について多くの記事を読みました。これまでのところ、私の理解では、デフォルトですべてobjectに equals とhashcodefunction があります.Javaclassにはこれらの関数があります。現在hashcodeは、オブジェクトのメモリ アドレスを返すことを意味します。hashcodesはデフォルトで一意です。オブジェクトが作成されると、一意の has コードが取得されます。

  • ここで私の質問は、ルールに従って関数をオーバーライドする必要があるoverride場合です..?equalshashcode
  • hashcodeequals メソッドと一緒に関数を実装しますが、hascode実装は役に立ちません..?
  • そして、 フレームワーク内およびフレームワークでどのようにhashcode使用されますか..?hashmaphashtablecollection

    class person{
    
       string name;
    
       string employer;
    
       boolean equals(Object o){
          person per=(person)o;
          if(per.employer==this.employeer){    
              return true
          }
          return false;
      }  
    
      int hashcode(){
    
          return 0;//what ever i do in hashcode does it really effect any thing..as the equals does                
                   //the comparison for me and gave me the result     
      }
    
    }
    

およびでの のhascodes使用方法hashmaphashtable

ありがとう、

4

2 に答える 2

1

Joshua Bloch の「Effective Java」の第 3 章を読んでください。

http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf

両方を正しく書く方法を教えてくれます。

マップのキーは不変でなければならないことを知っておく必要があります。これは、マップ/辞書をサポートするすべての言語 (Python、Java、C# など) に当てはまります。

于 2012-06-11T00:28:33.750 に答える
1

私はC# について非常によく似た質問をしましたが、正しい答えはほぼ同じだと思います。

私の見解の要点 (いくつかの矛盾する視点については私の質問への回答を参照) は、別のオブジェクトとまったく同じプロパティを持つオブジェクトが「等しい」ことを意味するかどうか、または 2 つのオブジェクトが異なるアドレス (ただし、プロパティ値がまったく同じ) は等しくありません。

私は、プロパティ値が同じでアドレスが異なるオブジェクトは実際には異なるという、より一般的な定義にとどまる傾向があります。他の定義を使用する必要があると思われる場合は、チームの全員に対して、a) それが慣例であること、および b) なぜそれが慣例であるのか、または悪いバグが発生する可能性が非常に高いことを明確にする必要があります。

さらに、オブジェクトを検索するためにハッシュ コードに依存するコレクション (ディクショナリなど) にオブジェクトが参加するときはいつでも、オブジェクトがそのコレクションに参加している間、ハッシュ コードは安定している必要があります。

于 2012-06-11T00:29:04.910 に答える