違いは速度です。どちらの方法も機能しますが、ハッシュ テーブルは高速です。
ArrayList
、または何らかの種類のを使用しList
て要素を見つける場合、目的の単語が見つかるまで、各リスト項目を 1 つずつ検査する必要があります。単語がそこにない場合は、リスト全体をループしました。
を使用するHashTable
と、検索している単語に対して、単語のハッシュの計算として知られる「魔法」を実行します。値のリストをループする代わりに、そのハッシュ値を使用して、単語がどこにあるかをすぐに推測できます。または、単語がハッシュに存在しない場合は、単語が存在しないと推測できます。
ここでは単純化しすぎましたが、それが一般的な考え方です。ハッシュテーブルがどのように機能するかについてのさまざまな説明とともに、ここで別の質問を見つけることができます。
を利用した小さなコード スニペットを次に示しますHashMap
。
// We will map our words to their definitions; word is the key, definition is the value
Map<String, String> dictionary = new HashMap<String, String>();
map.put("hello","A common salutation");
map.put("chicken","A delightful vessel for protein");
// Later ...
map.get("chicken"); // Returns "A delightful vessel for protein";
あなたが説明する問題は、次HashMap
の 3 つの要件を満たす辞書の基礎として aを使用することを求めています。
- 辞書に単語を追加する
- 辞書から単語を削除する
- 単語が辞書にあるかどうかを確認する
キーと値を格納するマップを使用するのは直観に反するように思えます。実際に必要なのはキー (または値) だけであるためです。ただし、上で説明したように、 aHashMap
を使用すると、キーに関連付けられた値を非常に迅速に見つけることができます。HashMap
同様に、がキーについて知っているかどうかを非常に迅速に確認できます。辞書の各単語を キーとして に格納し、HashMap
それを (気にしないため) などのガベージ値に関連付けることで、この品質を活用できnull
ます。
次のように、3 つの要件を満たす方法を確認できます。
Map<String, Object> map = new HashMap<String, Object>();
// Add a word
map.put('word', null);
// Remove a word
map.remove('word');
// Check for the presence of a word
map.containsKey('word');
情報を詰め込みすぎたくはありませんが、ここでの要件は、Set
. Java では、一般的に使用されるSet
は ですHashSet
。これは、宿題のこのビットで実装しているものとほとんど同じです。(実際、これが を使用するよう明示的に指示する宿題ではない場合は、HashMap
代わりに を使用することをお勧めしますHashSet
。)