1

配列リストにハッシュマップを追加しようとしています。しかし、arraylist(listOfCompleteEntries) に複数の値を追加しようとすると、map(completeEntrie) が以前の値をオーバーライドしています。

public class MapExample {

    public static void main(String a[]) {
        ArrayList listOfCompleteEntries = new ArrayList();
        Map<String, String> completeEntrie = new HashMap<String, String>();

        for (int i = 0; i < 3; i++) {

            completeEntrie.put("KEY_NAME", "Number:" + i);
            System.out.print(completeEntrie.toString());
            listOfCompleteEntries.add(completeEntrie);
            System.out.println(listOfCompleteEntries.toString());
        }
        System.out.println(listOfCompleteEntries.toString());
    }
}

上記のコードの出力は

{KEY_NAME=Number:0}[{KEY_NAME=Number:0}]
{KEY_NAME=Number:1}[{KEY_NAME=Number:1}, {KEY_NAME=Number:1}]
{KEY_NAME=Number:2}[{KEY_NAME =番号:2}, {KEY_NAME=番号:2}, {KEY_NAME=番号:2}]
[{KEY_NAME=番号:2}, {KEY_NAME=番号:2}, {KEY_NAME=番号:2}]

しかし、私は出力がこのようになりたい

{KEY_NAME=Number:0}[{KEY_NAME=Number:0}]
{KEY_NAME=Number:1}[{KEY_NAME=Number:0}, {KEY_NAME=Number:1}]
{KEY_NAME=Number:2}[{KEY_NAME =番号:0}, {KEY_NAME=番号:1}, {KEY_NAME=番号:2}]
[{KEY_NAME=番号:0}, {KEY_NAME=番号:1}, {KEY_NAME=番号:2}]

また、このマップが arraylist の前のマップを上書きする理由を説明してください。ご協力いただきありがとうございます。

4

1 に答える 1

2

無関係なタイトルにもかかわらず、配列リストに追加する一意のエントリごとに新しいマップ インスタンスを構築する必要があります。これがないと、同じマップ インスタンスを変更することになります。

于 2013-04-04T20:18:21.903 に答える