HashTable,HashSet,HashMapの違い

940 ワード

hashは一般的で重要なデータ構造であり、hash関数を用いてキー値(key)からストレージアドレスを計算し、直接アクセスする.完全hash関数(すなわち,キー値とアドレスが1つ1つに対応する)から算出されたアドレスは,アクセス時に時間的複雑度がO(1)である.
JAvaのObjectオブジェクトはhashCode()というメソッドを提供し、hash値を返します.変数の場合、このメソッドは一般的に変数のメモリアドレスを返します.JavaのHashMapオブジェクトを使用する場合、このメソッドはequals()メソッドとともに使用され、equals()がtrueを返す場合、hashCode()は同じ値を返すことができることを確認します.これを実現するには,一般にオブジェクトのhashCode()/equals()メソッドを書き換える.
hashについてjavaは3つのクラスHashMap,HashSet,HashTableを提供し,それらの違いは以下の通りである.
1.HashSet、HashTableは実質的にHashMapを用いて実現される;
2.HashSetでは、次のように定義されています.
        private final static Object dummy = new Object();
	public boolean add(Object obj){
	        return map.put(obj, dummy) == null;
        }
         すなわち、HashSetに挿入された値はHashMapのkeyであり、すべてのkeyに対応するvalueはdummyである.
   3.HashTableはDictionaryクラスに継承され、HashMapとの主な違いはHashTableが同期(synchronize)であり、null値操作は許可されていない(keyとvalueはnullではない).マルチスレッドアクセスでは、彼の方法の同期を実現する必要はなく、HashMapは外部同期を提供する必要があります.