Я работаю со вставкой списка на карту и не могу понять поведение вставки.неопределенность в отношении карты и списка при вставке: 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