【Java】enumと2次元配列を組み合わせて管理する方法まとめ|初心者向けサンプル付き解説

お疲れ様です。はるさらと申します。

業務システムやツール開発で「固定値の管理」をenumで行い、
対応する複数の値を2次元配列でまとめたい場面は意外と多いです。

この記事では 「enum × 2次元配列」 の組み合わせ方を、
サンプルコード付きでわかりやすく解説します。
enumを配列で扱う際の注意点や実務的な利用例、
代替手法もあわせて紹介します。


enumと2次元配列を組み合わせる基本構造

まずは基本的なイメージを掴んでおきましょう。
「enum」は定数をグループ化するのに便利ですが、
単独では複数の値を持つことができません。
そのため、2次元配列を使ってenumごとのデータをまとめて管理することが可能です。

基本サンプルコード

public class EnumArrayBasic {
    enum Weekday {
        MON, TUE, WED, THU, FRI
    }

    public static void main(String[] args) {
        String[][] schedule = {
            {"会議", "資料作成"},
            {"開発", "レビュー"},
            {"テスト", "設計"},
            {"ドキュメント整理", "定例会"},
            {"報告書作成", "チーム会議"}
        };

        for (int i = 0; i < Weekday.values().length; i++) {
            System.out.println(Weekday.values()[i] + " : " + String.join(", ", schedule[i]));
        }
    }
}

実行結果

MON : 会議, 資料作成
TUE : 開発, レビュー
WED : テスト, 設計
THU : ドキュメント整理, 定例会
FRI : 報告書作成, チーム会議

解説

  • Weekday.values() でenumのすべての定数を配列として取得しています。
  • 2次元配列の行とenumの定義順が対応しており、indexの整合性が重要です。
  • 経験の浅い方は、enumと配列の「並び順」をズラしてしまうミスに注意が必要です。

実務での利用例:enumごとに複数の値を持たせる

業務システムなどでは「定数ごとに複数の属性を持たせたい」というケースが多いです。
たとえば、「商品カテゴリ(enum)」ごとに「コード」「説明」「在庫状態」などを
保持したい場合です。

サンプルコード

public class EnumArrayPractical {
    enum ProductType {
        FOOD, BOOK, TOOL
    }

    public static void main(String[] args) {
        String[][] productInfo = {
            {"F001", "食品", "在庫あり"},
            {"B001", "書籍", "在庫少"},
            {"T001", "工具", "在庫なし"}
        };

        for (int i = 0; i < ProductType.values().length; i++) {
            String[] info = productInfo[i];
            System.out.printf("%s (%s): %s [%s]%n",
                    ProductType.values()[i],
                    info[0], info[1], info[2]);
        }
    }
}

実行結果

FOOD (F001): 食品 [在庫あり]
BOOK (B001): 書籍 [在庫少]
TOOL (T001): 工具 [在庫なし]

解説

  • enumをキー的に使いながら、2次元配列で属性をまとめています。
  • Javaではenum自体にもフィールドを持たせることができますが、
    「2次元配列で管理する」ことで柔軟なデータ操作(更新や外部入力) が可能になります。
  • 外部ファイル(CSVや設定ファイル)から配列を生成してenumに紐づける
    といった運用も現場でよく見られます。

代替手法:enumに配列やリストを直接持たせる

2次元配列を外部で管理するのではなく、
enum自体に情報を埋め込む方法もあります。
この方法は静的なデータ構造を定義する場合に向いています。

サンプルコード

public class EnumWithArray {
    enum Role {
        ADMIN(new String[]{"追加", "削除", "更新"}),
        USER(new String[]{"閲覧", "コメント"}),
        GUEST(new String[]{"閲覧のみ"});

        private final String[] permissions;

        Role(String[] permissions) {
            this.permissions = permissions;
        }

        public String[] getPermissions() {
            return permissions;
        }
    }

    public static void main(String[] args) {
        for (Role r : Role.values()) {
            System.out.println(r + " : " + String.join(", ", r.getPermissions()));
        }
    }
}

実行結果

ADMIN : 追加, 削除, 更新
USER : 閲覧, コメント
GUEST : 閲覧のみ

解説

  • この手法では「enumの内部に配列を持たせる」ことで、構造がシンプルになります。
  • 外部配列とenumを同期させる必要がないため、ミスが減ります。
  • ただし、配列を動的に変更することは難しいため、固定データ向けの設計です。

注意点とよくある間違い

  • enumの順序に依存しない設計を意識すること。
    2次元配列のindexとenum.ordinal()がズレると、意図しないデータを参照してしまいます。
  • 定義変更時の影響範囲にも注意。enumに新しい要素を追加した場合、配列側も必ず更新が必要です。
  • 柔軟性を重視するならMap構造も検討
    たとえば Map<Enum, List<String>> で管理すれば、動的な拡張が容易です。

関連記事

以下の記事も2次元配列の理解を深めるうえで参考になります。


まとめ

enumと2次元配列を組み合わせることで、
定義とデータの対応関係をシンプルに管理できます。

小規模な固定データであればenum内に配列を持たせるのが簡潔ですが、
柔軟に変更が必要な場合は外部の2次元配列やMapを併用する
のが現実的です。

今回紹介したサンプルコードをもとに、
業務シーンに合わせた構成を選んでみてください。

どなたかのお役に立てば幸いです。
それではまたー!