Java プログラムで辞書を作成する必要がある場合、この問題を解決する最も論理的な方法は、辞書データ構造を使用することです。このデータ構造により、情報を「キー - 値」の形式で保存できます。Java には、特別なDictionaryクラスとその子孫であるHashtable があります。また、「キーと値」のペアを格納するMapインターフェイスとHashMapクラスもあります。したがって、Java 辞書を作成するにはさまざまな方法があります。
辞書データ構造
したがって、Dictionary データ構造には、情報がキーと値の組み合わせとして格納されます。つまり、任意の値にキー (たとえば、ID など) を関連付け、このペアを辞書に入力します。辞書の要素のアドレス指定、削除、辞書内の検索はキーによって実行されます。このようなデータ構造を使って整理すると、例えば電話帳のように、名前(キー)と電話番号(値)が対応するような整理ができて便利そうです。Dictionary クラスとその拡張
まず、java.util.Dictionary <K, V> util.Dictionaryは抽象クラスです。これはキーと値の関係を表し、マップと同様に機能します。キーを指定すると、値を保存し、必要に応じてそのキーを使用して値を取得できます。したがって、これはキーと値のペアのリストです。
public abstract class Dictionary<K,V> extends Object
このクラスは抽象クラスなので、直接操作しません。Dictionary には直接の子クラスHashtable があります。したがって、Java で辞書を作成するには、Hashtable を使用できます。このクラスは、キーを値にマップするハッシュ テーブルを実装しており、null 以外のオブジェクトをキーまたは値として使用できます。Java 階層では、Hashtable はDictionaryを拡張し、Mapを実装します。例を挙げてみましょう。Hashtableに基づいて古典的な辞書、電話帳を作成します。
Dictionary phoneBook = new Hashtable();
このように書くと、一部の演算には型キャストを適用する必要があります。たとえば、キー抽出の場合です。
System.out.println(((Hashtable) phoneBook).keySet());
これを避けるために、次のように変更できます
Dictionary phoneBook = new Hashtable ();
で
Hashtable phoneBook = new Hashtable ();
この例では、わかりやすくするために、最初のオプションをそのままにします。
import java.util.Dictionary;
import java.util.Hashtable;
public class DictionaryDemo {
public static void main(String[] args) {
Dictionary phoneBook = new Hashtable();
// put() method
phoneBook.put("Johnny Walker", "2178");
phoneBook.put("Andrew Arnold", "1298");
phoneBook.put("Ivy Briggs", "1877");
phoneBook.put("Ricky McBright", "2001");
//print out Hashtable out
System.out.println(phoneBook);
//let's get the value using the key
System.out.println(phoneBook.get("Ivy Briggs"));
//there's no such key in out Hashtable
System.out.println(phoneBook.get("Sol Frank"));
//Is there a record with the "Johnny Walker" key?
System.out.println(((Hashtable) phoneBook).containsKey("Johnny Walker"));
//all keys of the Hashtable
System.out.println(((Hashtable) phoneBook).keySet());
//values from Hashtable
System.out.println(((Hashtable) phoneBook).values());
//the quantity of records
System.out.println(phoneBook.size());
//removing one record
phoneBook.remove("Andrew Arnold");
System.out.println(phoneBook);
}
}
出力は次のとおりです。
{アンドリュー アーノルド=1298, ジョニー ウォーカー=2178, リッキー マクブライト=2001, アイビー ブリッグス=1877} 1877 null true [アンドリュー アーノルド、ジョニー ウォーカー、リッキー マクブライト、アイビー ブリッグス] [1298, 2178, 2001, 1877] 4 {ジョニー ウォーカー=2178、リッキー・マクブライト=2001、アイビー・ブリッグス=1877}
辞書としての HashMap
HashMap は、 Hashtableとは異なり、 Dictionaryの直接の子孫ではありません。ただし、多くの機能があるため、ほとんどの場合、 HashMapを使用して辞書を作成する方が適切です。HashMapクラスは、機能的にHashtableと非常によく似ています。主な違いは、 Hashtableのメソッドは同期されますが、HashMap は同期されないことです。ハッシュテーブルでの同期により、コードのパフォーマンスが低下します。また、HashMapクラスはHashtableとは異なり、、キー (1 つ) として null を使用し、値として null のセットを使用できます。私たちの場合、プログラムは上の例とまったく同じになります。唯一の違いはコレクションのタイプです。ただし、ほとんどの場合、これは Java で辞書を操作する場合に推奨される方法です。
import java.util.HashMap;
import java.util.Map;
public class DictionaryDemo2 {
public static void main(String[] args) {
Map<String, String> phoneBook = new HashMap<String,String>();
phoneBook.put("Johnny Walker", "2178");
phoneBook.put("Andrew Arnold", "1298");
phoneBook.put("Ivy Briggs", "1877");
phoneBook.put("Ricky McBright", "2001");
System.out.println(phoneBook);
System.out.println(phoneBook.get("Johnny Walker"));
System.out.println(phoneBook.get("Ivy Briggs"));
System.out.println(phoneBook.get("Unknown Friend"));
System.out.println(phoneBook.containsKey("Johnny Walker"));
System.out.println(phoneBook.containsKey("Unknown Friend"));
System.out.println(phoneBook.keySet());
System.out.println(phoneBook.values());
System.out.println(phoneBook.size());
phoneBook.remove("Andrew Arnold");
System.out.println(phoneBook);
}
}
出力は次のとおりです。
{アンドリュー アーノルド=1298, アイビー ブリッグス=1877, リッキー マクブライト=2001, ジョニー ウォーカー=2178} 2178 1877 null true false [アンドリュー アーノルド、アイビー ブリッグス、リッキー マクブライト、ジョニー ウォーカー] [1298, 1877, 2001, 2178] 4 {アイビー・ブリッグス=1877、リッキー・マクブライト=2001、ジョニー・ウォーカー=2178}
GO TO FULL VERSION