CodeGym /Java Blog /ランダム /Javaで辞書を作成する方法
John Squirrels
レベル 41
San Francisco

Javaで辞書を作成する方法

ランダム グループに公開済み
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 tr​​ue [アンドリュー アーノルド、ジョニー ウォーカー、リッキー マクブライト、アイビー ブリッグス] [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 tr​​ue false [アンドリュー アーノルド、アイビー ブリッグス、リッキー マクブライト、ジョニー ウォーカー] [1298, 1877, 2001, 2178] 4 {アイビー・ブリッグス=1877、リッキー・マクブライト=2001、ジョニー・ウォーカー=2178}
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION