2
        HashMap<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();
    ArrayList<Integer> al = new ArrayList<Integer>();//arraylist as value

    for (int j = 0; j < 3; j++) {
        for (int i = 0; i < 5; i++) {
            al.add(i + j);
        }
        System.out.println(al);
        System.out.println(j);//key value
        map.put(j, al);
        System.out.println(map);
        al.clear();
    }

最後の値の配列リストがすべてのキーで上書きされるのはなぜですか? 書きすぎないようにするには?

4

2 に答える 2

8

この行を移動する必要があります:

ArrayList<Integer> al = new ArrayList<Integer>();//arraylist as value

ループ内。

ArrayListすべてのオブジェクトに対して 1 つだけではなく、オブジェクトごとに作成する必要があります。

for (int j = 0; j < 3; j++) {
    ArrayList<Integer> al = new ArrayList<Integer>();
    for (int i = 0; i < 5; i++) {
        al.add(i + j);
    }
    System.out.println(al);
    System.out.println(j);//key value
    map.put(j, al);
    System.out.println(map);
}
于 2013-05-13T12:54:13.217 に答える
0

古いものをクリアするだけでは再利用できませんArrayList。毎回新しいものを作成する必要があります。

for (int j = 0; j < 3; j++) {
    ArrayList<Integer> al = new ArrayList<Integer>();
    for (int i = 0; i < 5; i++) {
        al.add(i + j);
    }
    System.out.println(al);
    System.out.println(j);//key value
    map.put(j, al);
    System.out.println(map);
}

その理由は、すべてのエントリが実行ごとに上書きされるHashMap同じエントリを指すためです。ArrayList

于 2013-05-13T12:57:11.607 に答える