2012-03-19 9 views
19

DictionaryHashtableの違いは何ですか?また、JavaのDictionaryクラスを使用するにはどうすればよいですか?ハッシュテーブルと辞書の違いは何ですか?

+0

グーグルにはたくさんのものがあります - http://docs.oracle.com/javase/tutorial/collections/implementations/index.html – Vic

+0

そして、on stackoverflow - http://stackoverflow.com/questions/267312/difference-a-hashmap-and-a-dictionary-adt – Vic

+2

選択肢がある場合、 'Dictionary'の代わりに' Map'を使うべきです。これは時代遅れです。 – assylias

答えて

18

は、Hashtableの抽象基本クラスです。どちらも古いコードとの後方互換性のためにJDKに残っています。 HashMapと、Java 1.2で導入されたMapインタフェースの他の実装を使用することが期待されています。

+1

Hashtableはスレッドセーフであるのに対して、HashMapはスレッドセーフであると述べる価値があります。私の答えを見てください。 – assylias

+0

マップを実装するためにHashtableが改装されました。 – user2864740

2

は、私はあなたが求める答えが含まれているOOPの原則に関する講義を発見しました:

http://www.clear.rice.edu/comp202/04-fall/lectures/lec23/

EDIT:

辞書 大きなテーマでコンピューティングはストレージ/検索/除去のテーマです:データを後で検索してdもはや必要がなくなった場合には、そのすべてを最も効率的に処理します。これらのコンピューティング活動の抽象化は、以下のようにインタフェースとしてJavaで表現された、辞書と呼ばれる概念に具体化されています。

ハッシュテーブル ハッシュテーブルは通常の配列の一般化です。 ハッシュテーブル は、通常、キーの数に比例したサイズの配列を使用するため、実際に格納されるキーの数が可能なキーの総数に対して小さい場合、配列を直接アドレス指定する代わりに有効な になります。 実際に格納されます。 キーを配列インデックスとして直接使用する代わりに、キーから配列インデックスが計算されます。 ハッシングでは、キーkを持つ要素がスロットh(k)に格納されます。すなわち、ハッシュ関数hを用いて、鍵kからスロットを計算する。 > {0、1、...、M - - 1}

2

U: H: Hは、ハッシュテーブルT [0..m-1]のスロットにキーの集合UをマッピングDictionaryクラスは、キーを値にマップするHashtableなど、任意のクラスの抽象親です。すべてのキーとすべての値はオブジェクトです。いずれかのDictionaryオブジェクトでは、すべてのキーは最大でも1つの値に関連付けられます。ディクショナリとキーを指定すると、関連する要素を参照できます。 nullでないオブジェクトはキーとしても値としても使用できます。

14

Dictionaryのjavadocはあなたの答えがあります。

Dictionaryクラスは、キーを値にマッピングするHashtableなどの任意のクラスの抽象親です。

abstractクラスであるため、Dictionaryで直接動作しません。

注:

はまた、同じドキュメントから、次の点に注意してください。このクラスは廃止されました。新しい実装では、このクラスを拡張するのではなく、Mapインターフェイスを実装する必要があります。

3

Hashtableは、Dictionaryの実装です。 Dictionaryは抽象クラスなので直接使用することはできません。

Mapインターフェイスと実装クラス(そのうちHashMapが最も一般的です)によって置き換えられているため、どちらも使用しないでください。

1

辞書のjavadocによると:

注:このクラスは廃止されました。新しい実装では、このクラスを拡張するのではなく、 マップインターフェイスを実装する必要があります。

HashtableもJDK 1.0のビンテージです。 Mapインターフェースとそのより現代的な実装であるHashMapとTreeMapを好むべきです。

8

Dictionaryは、抽象クラスHashtableのスーパークラスです。 はそのままobsoleteです。 は、ハッシュテーブルについては、そのようなHashMapなど他のマップの上に持っていた利点は、スレッドセーフでしたが、Java 1.5以降のConcurrentHashMapの導入により、もはやそれを使用する本当の理由はありません - のようjavadoc

を見ますJava 2プラットフォームv1.2では、Mapインタフェースを実装するためにこのクラスを改装し、Java Collections Frameworkのメンバーにしました。新しいコレクションの実装とは異なり、Hashtableは同期されています。スレッドセーフな実装が必要ない場合は、Hashtableの代わりにHashMapを使用することをお勧めします。スレッドセーフな並行実装を望む場合は、Hashtableの代わりにConcurrentHashMapを使用することをお勧めします。あなたが本当に互換性のために持っていない限り、あなたのマップを同時に使用されている場合は、スレッドの安全性、またはConcurrentHashMapを必要としない場合HashMapのいずれかを使用し、DictionaryまたはHashtableを使用しないでください:要約で

環境。

関連する問題