Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのDictionaryクラスとは?特徴と主なメソッドを実例付きで解説

JavaにおけるDictionary(ディクショナリ)クラスは、キーと値のペアを格納するための抽象クラスです。Mapインターフェースと同様に動作しますが、現在ではレガシークラス(旧式のクラス)に分類されています。そのため、新規開発ではHashMapなどのMap実装を使うことが推奨されますが、既存コードの理解や保守の観点から、Dictionaryクラスの仕組みを知っておくことは依然として重要です。

Dictionaryクラスの主なメソッド

Dictionaryクラスには、以下のような重要なメソッドが用意されています。

  • keys():格納されているすべてのキーをEnumerationとして返す
  • elements():格納されているすべての値をEnumerationとして返す
  • isEmpty():ディクショナリが空かどうかを判定する
  • get(Object key):指定したキーに対応する値を取得する
  • remove(Object key):指定したキーとそれに対応する値を削除する
  • size():格納されているエントリ数を返す

keys()とelements()が返すEnumerationは、hasMoreElements()とnextElement()を使って順番に要素を取り出して反復処理できます。

構文

public abstract class Dictionary<K,V> extends Object

Dictionaryは抽象クラスのため、直接インスタンス化することはできません。実際には、そのサブクラスであるHashtableなどを介して利用します。

使用例

以下のコードでは、HashtableをDictionary型の変数に代入し、キーと値をそれぞれEnumerationで反復表示しています。

import java.util.*;

public class DictionaryTest {
    public static void main(String[] args) {
        // HashtableはDictionaryの具象サブクラス
        Dictionary<Integer, String> dic = new Hashtable<Integer, String>();

        dic.put(1, "Adithya");
        dic.put(2, "Jaidev");
        dic.put(3, "Raja");

        // キーの一覧をEnumerationで反復
        Enumeration<Integer> key = dic.keys();
        while (key.hasMoreElements()) {
            System.out.println(key.nextElement());
        }

        // 値の一覧をEnumerationで反復
        Enumeration<String> element = dic.elements();
        while (element.hasMoreElements()) {
            System.out.println(element.nextElement());
        }
    }
}

実行結果

3
2
1
Raja
Jaidev
Adithya

このように、Hashtableは内部的にハッシュテーブル構造を持つため、出力順序は挿入順ではなくなる点に注意してください。

まとめ

Dictionaryクラスはキーと値のペアを扱う抽象クラスであり、Mapと似た役割を果たします。ただし、Java 1.2以降はMapインターフェースが導入されたため、Dictionaryはレガシーな存在となっています。新規プロジェクトではHashMapやConcurrentHashMapなどMap系のコレクションを使用するのがベストプラクティスですが、古いコードベースを読む際にはDictionaryとEnumerationの組み合わせを理解しておくと役立ちます。

  1. JavaのSwingWorkerクラスとは?GUIアプリで非同期処理を行う重要性と使い方を解説

    SwingWorkerクラスは、時間のかかる処理(長時間実行タスク)などをワーカースレッド上で非同期に実行し、その結果に基づいてイベントディスパッチスレッド(EDT)からSwingコンポーネントを安全に更新するための仕組みを提供します。このクラスはJava 1.6で導入されました。Swingでは、すべてのUI更新はEDT上で行う必要があります。しかし、EDT上で重い処理を直接実行すると画面がフリーズしてしまい、ユーザー体験を大きく損ないます。SwingWorkerを使えば、バックグラウンドでの処理とUIの更新を適切に分離できるため、応答性の高いデスクトップアプリケーションを実現できます。Swi

  2. JavaのSwingUtilitiesクラスとは?invokeAndWait()とinvokeLater()で実現するスレッドセーフなGUI操作

    JavaのSwingでは、コンポーネントが画面に表示された後、それらを操作できるのは「イベントディスパッチスレッド(Event Handling Thread)」と呼ばれる単一のスレッドだけです。これはSwingの重要な設計原則であり、複数のスレッドから同時にGUIを操作すると不整合や予期しない動作が発生するため、すべての描画・更新処理をこのスレッドに集約することで安全性を確保しています。開発者は、別途作成したコードブロックの参照をイベントディスパッチスレッドに渡すことができます。SwingUtilitiesクラスには、そのための2つの重要なstaticメソッド、invokeAndWait()