[Java]ハッシュ・テーブル


  • 키(key)에 데이터(value)를 매핑할 수 있는 데이터 구조
  • ハッシュ関数により、配列に鍵データを格納可能なアドレス(インデックス番号)
  • が算出される.
  • キーを押すと、データが格納されているアドレスがすぐに表示されます.저장 및 탐색 속도가 획기적으로 빨라짐
  • プリセットハッシュ関数は、生成可能なアドレス(インデックス番号)に空間を割り当て、その後、キー記憶およびブラウズデータ
  • をサポートする.
    HashMapは構造は似ているが用途は異なる.
    HashTableはkeyとvalueを1:1で取得し、HashTableに格納する.
    しかし、HashMap과 반대로 동기화があります.HashMap에서는 값으로 null이 입력이 가능しかしHashTable에서는 null 입력이 불가능keyは重複していますが、valueは重複を許可します.(同期作用)
    ハッシュ表用語
    ハッシュ関数
    任意のデータを高低長の値に戻す関数です.
    ハッシュ、ハッシュ値およびハッシュ・アドレス:ハッシュ関数によって返される固定長値
    ハッシュ表
    スロット:ハッシュ・テーブルのデータを格納するスペース
    pythonではディックシャーナとして用いられる.
    どのように構成されているか見てみましょう.
    hash table
    key    value
    a      111
    b      222
    c      333
    上記の例に示すようにkey-valueはバンドル形式で表示されます.
    アレイとの相違
    配列にリストされているデータを検索するには、検索する値を各配列の値と比較する必要があります.
    ハッシュテーブルは、私が探しているキー値を知っていれば見つけることができます.(배열보다 탐색 속도가 획기적으로 빨라짐)メリットとデメリット
  • の利点
  • データの格納/読み取り速度が速い.
  • ハッシュ・キーに関するデータがあるかどうかを簡単に判断
  • の欠点
  • は、一般的により多くの記憶領域を必要とする.
  • 複数の鍵のアドレスが同じである場合、競合
  • を解決するために別のデータ構造が必要である.
    ハッシュ表は(중복)です.
    ハッシュ・テーブルの使用
    import java.util.Hashtable;
    
    public class Main {
          public static void main(String[] args) {
                // 선언하기
                Hashtable ht = new Hashtable();  // 타입 설정 x Object 설정
                Hashtable<Integer, Integer> i = new Hashtable<>();  // 타입 설정
                Hashtable<Integer, Integer> i1 = new Hashtable<>(10);  // 초기용량 지정
            
                // 값 추가하기
                ht.put("1", "aaa");
                ht.put("2", "bbb");
                ht.put("3", "ccc");
            
                // 값 삭제하기
                ht.remove("2");  // key값을 이용해 값을 삭제한다.
            
                // 크기 구하기
                System.out.println("size : " + ht.size());
            
                // 값 출력하기
                for (Map.Entry<String, String> e: ht.entrySet())
                  System.out.println("key : " + e.getKey() + ", Value : " + e.getValue());
          }
    }