web-dev-qa-db-ja.com

HashtableとDictionaryの違いは何ですか?

DictionaryHashtableの違いは何ですか?JavaでDictionaryクラスをどのように操作しますか?

22

DictionaryHashtableの抽象基本クラスです。古いコードとの下位互換性のため、どちらもまだJDKに含まれています。 Java 1.2で導入されたHashMapおよびMapインターフェースの他の実装を使用することが期待されています。

21
AlexR

Dictionary のjavadocに答えがあります。

辞書クラスは、キーを値にマップするHashtableなどのクラスの抽象親です。

Dictionaryクラスであるため、abstractを直接操作することはできません。

同じドキュメントの次の点にも注意してください。

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

15
Bill the Lizard

Dictionaryは、Hashtableのスーパークラスである抽象クラスです。 obsolete であるため、Dictionaryを使用しないでください。 Hashtableの場合、HashMapなどの他のマップよりも優れていたのはスレッドセーフでしたが、ConcurrentHashMapが導入されたことにより、Java 1.5であるため、実際に使用する理由はありません。今後は javadoc を参照

Java 2プラットフォームv1.2以降、このクラスはMapインターフェイスを実装するために改良され、Javaコレクションフレームワークのメンバーになりました。新しいコレクションの実装、Hashtableは同期されます。スレッドセーフな実装が必要ない場合は、Hashtableの代わりにHashMapを使用することをお勧めします。スレッドセーフな高度な同時実装が必要な場合は、代わりにConcurrentHashMapを使用することをお勧めしますハッシュテーブルの。

要約するとDictionaryまたはHashtableは使用しないでください。互換性の理由で本当に必要な場合を除き、どちらかを使用してください。 HashMapスレッドセーフが必要ない場合、またはConcurrentHashMapマップが並行環境で使用されている場合。

10
assylias

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

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

3
Nick

私はOOPの原則についての講義を見つけました。これにはあなたが求める答えが含まれています。

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

編集:

Dictionaryコンピューティングの主要なテーマは、ストレージ/取得/削除のテーマです。データがどこかに格納され、後で必要なくなったときにデータを取得して破棄できるようになります、これらすべての最も効率的な方法で。これらのコンピューティングアクティビティの抽象化は、Javaでインターフェイスとして次のように表現される、いわゆる辞書の概念で具体化されます。

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

辞書クラスは、キーを値にマップするHashtableなどのクラスの抽象親です。すべてのキーとすべての値はオブジェクトです。 1つのDictionaryオブジェクトでは、すべてのキーが最大で1つの値に関連付けられています。辞書とキーを指定すると、関連付けられている要素を検索できます。 null以外のオブジェクトはすべて、キーおよび値として使用できます。

2
kundan bora

辞書のjavadocsによると:

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

HashtableもJDK 1.0ヴィンテージです。 Mapインターフェースとその最新の実装であるHashMapとTreeMapを好むはずです。

1
duffymo