Java のハッシュ関数は、オブジェクトの値を整数の形式で定義して返す解決策として作成され、ハッシュ関数の出力として得られるこの戻り値をハッシュ値と呼びます。すべてのハッシュ関数は、オブジェクトの戻り値として 4 バイトの整数を返します。同じ型の 2 つのオブジェクトは、ハッシュ関数の出力と同じ整数値を持ち、同様に、異なるオブジェクトは異なるハッシュ値を持ちます。ハッシュ値からオブジェクトを導き出すことはできないため、ハッシュ関数は不可逆関数になります。
ハッシュ関数とは何ですか?
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
ハッシュ関数は、オブジェクトに対応する整数値を返す関数として定義できます。ハッシュ関数は、同じオブジェクトに対して常に同じ整数値を返します。ハッシュ関数によって返される整数値はハッシュ値と呼ばれます。ハッシュ関数に関する重要な点は次のとおりです:
ハッシュ関数の一般的な応用例は次のとおりです:
ほぼすべてのプログラミング言語には、ハッシュベースのデータ構造が含まれています。たとえば、Java には、ハッシュ関数に基づくハッシュ テーブル、ハッシュ マップ、ハッシュ セット、ツリー セットのデータ構造が含まれています。これらのデータ構造は Key-Value 設計であり、各キーは一意ですが、複数のキーに同じ値が存在できます。
このアルゴリズムはデータ整合性チェックで使用されます。このアルゴリズムは、任意の長さのメッセージを入力として受け取り、固定長 (128 ビット) データを出力として生成します。メッセージ ダイジェスト アルゴリズムの例には、MD2、MD4、MD5、MD6 などがあります。
このアルゴリズムはデータ セキュリティに使用され、アプリケーションや Secure Socket Layer (SSL) などのプロトコルで使用されます。 SHA-0、SHA-1、SHA-2、および SHA-3 は、セキュア ハッシュ アルゴリズムの一般的なカテゴリです。
ユーザーを認証するためにパスワードが入力されると、入力されたパスワードのハッシュ値が計算され、元のパスワードのハッシュが保存されているサーバーにネットワーク経由で送信されるログイン シナリオを考えてみましょう。これは、パスワードがクライアントからサーバーに送信されるときにスニッフィングが行われないようにするために行われます。
プログラミング言語ではさまざまなキーワードが使用されるため、これらのキーワードと識別子を区別するために、コンパイラはハッシュ テーブルを使用して実装されたハッシュ セットを使用して、これらすべてのキーワードと識別子を保存します。
これは、ハッシュを利用して、指定された文字列内の 1 つ以上のパターンを検索する検索アルゴリズムです。これは、最も一般的に使用されるアルゴリズムの 1 つです。
これらのインターフェースには、一度に 2 つのオブジェクトを比較するために使用される関数が含まれています。これらの関数の戻り値は、指定されたオブジェクトが比較対象のオブジェクトより小さいか、等しいか、大きいかに基づいて、負、ゼロ、または正になります。内部的にコンパレータおよび比較可能なインターフェイスは、ハッシュ関数を使用してオブジェクトを相互に比較します。
プライオリティ キューは、FIFO (先入れ先出し) 順序に従う通常のキューとは異なります。優先度キュー要素は、優先度に基づいてカスタム順序で配置されます。これは、インターンがハッシュ関数に基づいている比較対象と比較器を使用して内部実装されます。
ハッシュ関数を作成するための一般的な設計原則をいくつか示します。
public int hashCode (){ //Logic goes here }
ハッシュの衝突は、2 つ以上のオブジェクトが同じハッシュ値を返す場合に発生します。データをキーと値のペアで保存する Java ハッシュ マップの例を見てみましょう。オブジェクトをハッシュ マップに配置すると、キーのハッシュ値が計算され、このハッシュ値に基づいて値オブジェクトを格納するバケットの場所が見つかります。異なるハッシュ値を持つオブジェクトは、異なるバケットに入れる必要があります。 2 つ以上のオブジェクトが同じハッシュ値を持つ場合、それらはリンク リストと呼ばれる追加のデータ構造を使用して同じバケットの場所に保存されます。同じハッシュ値を持つすべてのオブジェクトは、リンク リストを使用して連鎖されます。このメカニズムはチェーンと呼ばれます。ハッシュ関数を使用して衝突を処理する方法は次のとおりです:
ハッシュ化の利点は次のとおりです:
ハッシュには利点の他に、次のような制限もあります。
以上がJavaのハッシュ関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。