У меня возникли проблемы с реализацией HashMaps
с ArrayLists
в моем классе java. Дело в том, что добавление объектов к ArrayList
- это HashMap
, хотя я не обновляю свои HashMap
.Проблема с использованием HashMaps с ArrayList
Это код, который я не могу понять, как работает:
HashMap<String, ArrayList<String>> map = new HashMap<>();
ArrayList<String> array = new ArrayList<String>();
array.add("One");
array.add("Two");
map.put("Key", array);
array.add("Three"); //2. Why does this get added to the HashMap?
System.out.println(map1.get("Key"));
//1. This print out [One, Two, Three].. When it should be [One, Two]!
Вот как ссылки работают в Java. То, что вы положили на карту, является ссылкой на список, поэтому любые изменения в списке будут отображаться при печати карты. –
'add()' не копирует список, он просто вставляет ссылку. – Andreas
Так работает Java. map.getKey («Ключ») и ваша переменная массива ссылаются на одно и то же местоположение в памяти. Добавляете ли вы элемент через ссылку «массив» или через ссылку, возвращаемую map.getKey («ключ»), вы добавляете элементы в одно и то же место в памяти. – bdkosher