DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

12章33

以下に、2つの回避方法をそれぞれ別々のコードとして示し、コメントアウトで解説を追加します。

方法1: keys.clear();を削除して例外を回避

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {
    // HashMapを作成してキーと値を格納するための静的マップ
    static Map<String, String> map = new HashMap<>();

    // 不変リストを使用 (例外が発生する可能性のあるリスト)
    static List<String> keys = List.of("A", "B", "C");

    // 値の配列を定義
    static String[] values = {"1", "2", "3"};

    // 静的初期化ブロックでキーと値をマップに追加
    static {
        for (int i = 0; i < keys.size(); i++) {
            map.put(keys.get(i), values[i]);
        }
    }

    public static void main(String[] args) {
        // 例外が発生するkeys.clear()の呼び出しを削除
        // keys.clear(); // この行を削除することで例外を回避

        // values配列を空にする
        values = new String[0];

        // マップのサイズ、キーリストのサイズ、values配列の長さを出力。3,3,0
        System.out.println(map.size() + "," + keys.size() + "," + values.length);
    }
}
Enter fullscreen mode Exit fullscreen mode

解説:

  1. 方法1: keys.clear();を削除して例外を回避
    • keysリストはList.of("A", "B", "C")を使用して不変リストとして作成されています。
    • 不変リストのため、変更操作(例:clear())はサポートされておらず、keys.clear();を呼び出すとUnsupportedOperationExceptionが発生します。
    • この例外を回避するために、keys.clear();の行を削除しました。

map.size() は 3(マップには3つのキーと値のペアが格納されています)
keys.size() は 3(keysリストは不変であり、変更されないので3つの要素を持っています)
values.length は 0(values配列は空に変更されました)

方法2: 可変リストを使用して例外を回避

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainWithMutableKeys {
    // HashMapを作成してキーと値を格納するための静的マップ
    static Map<String, String> map = new HashMap<>();

    // 可変リストを使用 (例外を回避するためのリスト)
    static List<String> keys = new ArrayList<>(List.of("A", "B", "C"));

    // 値の配列を定義
    static String[] values = {"1", "2", "3"};

    // 静的初期化ブロックでキーと値をマップに追加
    static {
        for (int i = 0; i < keys.size(); i++) {
            map.put(keys.get(i), values[i]);
        }
    }

    public static void main(String[] args) {
        // 可変リストの場合、keys.clear()は正常に動作する
        keys.clear(); // この行は正常に動作

        // values配列を空にする
        values = new String[0];

        // マップのサイズ、キーリストのサイズ、values配列の長さを出力。3,0,0
        System.out.println(map.size() + "," + keys.size() + "," + values.length);
    }
}
Enter fullscreen mode Exit fullscreen mode

解説:

  1. 方法2: 可変リストを使用して例外を回避
    • keysリストをnew ArrayList<>(List.of("A", "B", "C"))を使用して可変リストとして作成します。
    • これにより、keys.clear();が正常に動作し、例外は発生しません。
    • keys.clear();を呼び出しても問題なくリストをクリアすることができます。

map.size() は 3(マップには3つのキーと値のペアが格納されています)
keys.size() は 0(keys.clear();によってkeysリストが空になります)
values.length は 0(values配列は空に変更されました)

Top comments (0)