Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでのHashMapの内部動作


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

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

public native hashCode()

「バケット」について説明したので、それが何を意味するのかを理解することが重要です。これは、ノードを格納するために使用される要素です。 1つのバケットに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.

例を見てみましょう-

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」関数がオーバーライドされ、キーがハッシュマップのキーと等しいかどうかがチェックされます。クラスDemoは、HashMapの新しいインスタンスが作成されるメイン関数を定義します。要素は「put」機能を使用してこの構造に追加され、コンソールに出力されます。


  1. Pythonでのリストの内部動作

    このチュートリアルでは、Python3.xでのリストの内部動作について学習します。またはそれ以前。また、各ステップでpythonステートメントを作成するときに、オブジェクトとフレームの形成についても見ていきます。 リストの初期化:これは、いくつかの要素を含むリストを作成していることを意味します。 >>> lis=[1,2,3,4] ここで、リスト変数は、上記のようにリストオブジェクトを参照しているグローバルフレームで宣言されています 次に、リストに要素を追加したときに何が起こったかを見てみましょう。 >>> lis.append(8) こ

  2. 修正:Windows 10 で Windows キーが機能しない

    Windows キーが Windows 10 で機能しない? Windows キー (WinKey とも呼ばれます) は、スタート メニューの登場以来ずっと使用されてきました。 Windows アイコンが付いたこの物理キーは、そこに存在するすべてのキーボードの fn キーと alt キーの間にあります。 Windows キーを押すだけでスタート メニューが起動し、コンピュータにインストールされているすべてのアプリケーションにアクセスできます。 WinKey は、すべてのアプリケーションへの物理的なゲートウェイであるだけでなく、Windows システムの 75% 以上のショートカットの主キーと