HashCodeの簡単な理解


データ照会が一番速いのは配列であることはよく知られていますが、ArrayListの下位層には配列が使われており、配列は下付き文字に基づいて迅速に対応するデータを見つけることができます.だからArrayListの検索速度は速いですが、HashMapやHashSetのように、この2つのセットの検索速度も速いことも知っています.では、HashMapとHashSetの下層は何で実現されているのでしょうか.実は私たちはこの2つのうちの1つの集合を研究すればいいのですが、HashSetのソースコードを見たことがある人は知っているはずです.HashSetの下位実装はHashMapです.Hashcode()メソッドはObjectクラスのローカルメソッドであり,キーワードnativeで修飾され,このメソッドがcまたはc++で実装されていることを示している.今日、この方法がどのように実現されているのかを深く理解するのではなく、この方法がオブジェクトのメモリアドレス情報を返すことを簡単に理解する必要があります.(実はそんなに簡単ではありませんが、このように理解するともっとイメージ的です)
  @HotSpotIntrinsicCandidate
  public native int hashCode();

Hashcodeって何?
HashCodeはObjectのメソッドであり、hashCodeメソッドはhash code値を返し、String、Set、HashTable、HashMapなどのhashテーブルをよりよくサポートするために使用されます.
Hashcodeの重要性
簡単に言えば、HashcodeはHashMap、HashSetなどの集合の効率を高めるために、HashMapもHashSetも無秩序であり、中の値が同じではないことを知っています.では、addやput操作をするときは、その集合に重複要素があるかどうかをクエリーしなければなりません.配列がクエリー速度が最も速いデータ構造であることは知っていますが、データは使用されていません.二分検索などの検索アルゴリズムも考えられますが、開発性能を満たすことはできません.そしてこのときhashcodeは大きな役割を果たし、下位の原理は大体こうである:1、私たちはまず検索対象のHashcodeでメモリに行ってそのアドレスにデータがすでに存在しているかどうかを調べ、存在しなければデータを挿入する.2、すでに存在する場合は、equalsメソッドで両者の値が等しいかどうかを比較し、等しい場合はデータを追加する必要はありません.3.equalsメソッドで比較した2つの値が等しくない場合、1つのHashcodeに2つのデータを格納するためのチェーンテーブルが生成されます.
下位層の実現原理により,1,Hashcode法を用いてデータを検索するのに1回,equals法を加えるだけで合計数回であることが分かったので,HashMapの検索効率が高い理由を見いだすことができる.2、equalsメソッドとHashcodeメソッドは常に一緒に使用されます.なぜなら、2つのオブジェクトのHashcodeが同じである場合、2つのオブジェクトは必ずしも等しいとは限らず、2つのオブジェクトが等しい場合、彼のHashcodeは必ず等しいからです.したがって,equalsメソッドを書き換える場合も,対応するhashcodeメソッドを書き換えるのが一般的である.
まとめ:2つのオブジェクトは等しく、hashcodeは必ず等しい2つのオブジェクトは等しくなく、hashcodeは必ずしも等しくないhashcodeは等しくなく、2つのオブジェクトは必ずしも等しくないhashcodeは等しくなく、2つのオブジェクトは必ず等しくない