ホームページ  >  記事  >  Java  >  Java における HashMap の内部動作

Java における HashMap の内部動作

WBOY
WBOY転載
2023-08-28 13:37:461304ブラウズ

Java における HashMap の内部動作

関数「hashCode」は、Java でオブジェクトのハッシュ コードを取得するために使用されます。これはスーパークラス Object のオブジェクトです。オブジェクトによって参照されるメモリを整数として返します。これはネイティブ関数であるため、メソッドを Java で直接使用してオブジェクトへの参照を取得することはできません。

HashMap のパフォーマンスを向上させるために、hashCode() を正しく使用してください。基本的に、この関数はバケットとインデックスの値を計算するために使用されます。定義方法は次のとおりです -

public native hashCode()

「バケット」について説明しましたが、それが何を意味するのかを理解することが重要です。ノードを格納するために使用される要素です。バケット内には 3 つ以上のノードが存在する場合があります。リンク リスト データ構造を使用してノードを接続できます。ハッシュマップの容量は、バケットと負荷率によって計算できます。

Capacity = number of buckets * load factor

関数「equals」は、2 つのオブジェクト間の等価性をチェックするために使用されます。これはスーパークラス Object によっても与えられます。この関数は、カスタム実装を提供することでカスタム クラスでオーバーライドできます。この関数は、問題の 2 つのオブジェクトが等しいかどうかに応じて true または false を返します。

配列のサイズがあまり大きくならないようにインデックス値を生成し、outOfMemoryException を回避します。配列インデックスを見つける式は -

Index = hashCode(key) & (n-1) – Here n refers to number of buckets.

です。例を見てみましょう -

Example

ライブ デモンストレーション

import java.util.HashMap;
class hash_map{
   String key;
   hash_map(String key){
      this.key = key;
   }
   @Override
   public int hashCode(){
      int hash = (int)key.charAt(0);
      System.out.println("The hash code for key : " + key + " = " + hash);
      return hash;
   }
   @Override
   public boolean equals(Object obj){
      return key.equals(((hash_map)obj).key);
   }
}
public class Demo{
   public static void main(String[] args){
      HashMap my_map = new HashMap();
      my_map.put(new hash_map("This"), 15);
      my_map.put(new hash_map("is"), 35);
      my_map.put(new hash_map("a"), 26);
      my_map.put(new hash_map("sample"), 45);
      System.out.println("The value for key 'this' is : " + my_map.get(new hash_map("This")));
      System.out.println("The value for key 'is' is: " + my_map.get(new hash_map("is")));
      System.out.println("The value for key 'a' is: " + my_map.get(new hash_map("a")));
      System.out.println("The value for key 'sample' is: " + my_map.get(new hash_map("sample")));
   }
}

出力

The hash code for key : This = 84
The hash code for key : is = 105
The hash code for key : a = 97
The hash code for key : sample = 115
The hash code for key : This = 84
The value for key 'this' is : 15
The hash code for key : is = 105
The value for key 'is' is: 35
The hash code for key : a = 97
The value for key 'a' is: 26
The hash code for key : sample = 115
The value for key 'sample' is: 45

「hash_map」という名前のクラスは文字列とコンストラクターを定義します。これは、「hashCode」と呼ばれる別の関数によってオーバーライドされます。ここでは、ハッシュマップのキー値が整数に変換され、ハッシュ コードが出力されます。次に、「equals」関数がオーバーライドされ、キーがハッシュマップのキーと等しいかどうかをチェックします。 Class Demo は、HashMap の新しいインスタンスが作成される main 関数を定義します。 「put」関数を使用して要素がこの構造に追加され、コンソールに表示されます。

以上がJava における HashMap の内部動作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。