#Java でのハッシュ


ハッシング



*ハッシュには、キーをいくつかの値にマップするハッシュ関数があります.ただし、これらのハッシュ関数は、2 つ以上のキーが同じ値にマッピングされる衝突を引き起こす可能性があります.チェーンハッシュは衝突を回避します.アイデアは、ハッシュ テーブルの各セルが、同じハッシュ関数値を持つレコードのリンク リストを指すようにすることです.
ハッシュテーブルに「N」個のバケットがあるようなハッシュ関数を作成しましょう.
ノードをハッシュ テーブルに挿入するには、指定されたキーのハッシュ インデックスを見つける必要があります.そして、ハッシュ関数を使用して計算できます.
例: hashIndex = キー % noOfBuckets
挿入: 上記で計算されたハッシュ インデックスに対応するバケットに移動し、リストの最後に新しいノードを挿入します.
削除: ハッシュ テーブルからノードを削除するには、キーのハッシュ インデックスを計算し、計算されたハッシュ インデックスに対応するバケットに移動し、現在のバケットのリストを検索して、指定されたキーを持つノードを見つけて削除します (見つかった場合). . *

Java でハッシュを実装する方法



方法-1:



HashTable (ハッシュの同期実装) の助けを借りて
import java.util.*;
クラスGFG {
public static void main(String args[])
{

    // Create a HashTable to store
    // String values corresponding to integer keys
    Hashtable<Integer, String>
        hm = new Hashtable<Integer, String>();

    // Input the values
    hm.put(1, "Geeks");
    hm.put(12, "forGeeks");
    hm.put(15, "A computer");
    hm.put(3, "Portal");

    // Printing the Hashtable
    System.out.println(hm);
}

}
出力:

{15=コンピューター、3=ポータル、12=forGeeks、1=Geeks}

方法-2:



HashMap (ハッシュの非同期高速実装) の助けを借りて

//配列から HashMap を作成する Java プログラム
//要素をキーとして取得し、
//値としての頻度

import java.util.*;

クラスGFG {

// Function to create HashMap from array
static void createHashMap(int arr[])
{
    // Creates an empty HashMap
    HashMap<Integer, Integer> hmap = new HashMap<Integer, Integer>();

    // Traverse through the given array
    for (int i = 0; i < arr.length; i++) {

        // Get if the element is present
        Integer c = hmap.get(arr[i]);

        // If this is first occurrence of element
        // Insert the element
        if (hmap.get(arr[i]) == null) {
            hmap.put(arr[i], 1);
        }

        // If elements already exists in hash map
        // Increment the count of element by 1
        else {
            hmap.put(arr[i], ++c);
        }
    }

    // Print HashMap
    System.out.println(hmap);
}

// Driver method to test above method
public static void main(String[] args)
{
    int arr[] = { 10, 34, 5, 10, 3, 5, 10 };
    createHashMap(arr);
}

}
出力:

{34=1, 3=1, 5=2, 10=3}

方法-3:



With the help of LinkedHashMap (Similar to HashMap, but keeps order of elements)

//LinkedHashMap の動作を示す Java プログラム
import java.util.*;

パブリック クラス BasicLinkedHashMap
{
public static void main(文字列 a[])
{
LinkedHashMap lhm =
新しい LinkedHashMap();
lhm.put("one", "practice.geeksforgeeks.org");
lhm.put("2", "code.geeksforgeeks.org");
lhm.put("4", "quiz.geeksforgeeks.org");

    // It prints the elements in same order 
    // as they were inserted    
    System.out.println(lhm);

    System.out.println("Getting value for key 'one': "
                                   + lhm.get("one"));
    System.out.println("Size of the map: " + lhm.size());
    System.out.println("Is map empty? " + lhm.isEmpty());
    System.out.println("Contains key 'two'? "+ 
                              lhm.containsKey("two"));
    System.out.println("Contains value 'practice.geeks"
    +"forgeeks.org'? "+ lhm.containsValue("practice"+
    ".geeksforgeeks.org"));
    System.out.println("delete element 'one': " + 
                       lhm.remove("one"));
    System.out.println(lhm);
}

}
出力:

{1=practice.geeksforgeeks.org、2=code.geeksforgeeks.org、4=quiz.geeksforgeeks.org}
キー 'one' の値を取得: practice.geeksforgeeks.org
マップのサイズ: 3
マップは空ですか?間違い
キー「2」が含まれていますか?真実
値「practice.geeksforgeeks.org」が含まれていますか?真実
要素「one」を削除: practice.geeksforgeeks.org
{two=code.geeksforgeeks.org, four=quiz.geeksforgeeks.org}