マップにリスト挿入を使用していて、挿入動作を理解できません。挿入時のマップとリストの値のあいまいさ:java
public class TestList {
public static void main(String[] args) {
String strarray[] = new String[5];
for(int i = 0; i < 5; i++){
strarray[i] = "Demo" + i;
}
Map<Integer, List<String>> cluesByText = new HashMap<Integer, List<String>>();
int j = 0;
for (String str : strarray) {
System.out.println(str);
List<String> s = cluesByText.get(str);
if (s == null) {
s = new LinkedList<String>();
cluesByText.put(j, s);
}
s.add(str);
s.add(str);
s.add(str);
s.remove(1);
// why it is storing without doing cluesByText.put(j,s);
j++;
}
//output is:
System.out.println(cluesByText);
}
}
問題がマップにリストの挿入を実行した後、挿入してリストの内容を変更するに/削除操作している間、それは 前の行にマップに格納されたリストに反映されてきています。
最終出力来ている地図の内容です。
{0=[Demo0, Demo0], 1=[Demo1, Demo1], 2=[Demo2, Demo2], 3=[Demo3, Demo3], 4=[Demo4, Demo4]}
リストの状態が既にマップに格納されているため、このように起こっているのはなぜわかりませんか?
挿入したリストの値は、依然として元のリストの値を指しています。 –
質問には関係ありませんが、コードはあまり意味がありません。 'cluesByText.get(str)'は、マップのキーが文字列ではなく整数であるため、常にnullを返します。 – Eran