2016-09-18 4 views
-2

Я пытаюсь добавить ArrayList в HashMap, и позже я ссылаюсь на ArrayList на другой объект.Копирование ArrayList в Hashmap и сброс Arraylist

Но когда я изменить содержимое ArrayList, он отражается в значении HashMap слишком

Пример:

 HashMap<Interger, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>(); 

     List<String> list1 = new ArrayList<String>(); 
     list1.add("cat"); 
     map.put(1, list1); 

     list1 = new ArrayList<String>(); 

     list1.add("dog"); 
     map.put(2, list1); 

Теперь карта только вход «собака» в нем, это делает есть запись «cat».

Я не хочу создавать ArrayList с новым именем, таким как list2, чтобы удерживать запись «собака».

Я использую это в цикле, так что мне нужно иметь только одну переменную ArrayList, как ... ... и песни1 Я хочу, чтобы поместить данные в HashMap, и продолжать ....

list1 = new ArrayList(); и сохраните в нем новые значения и поместите их в HasnMap.

Как правильно поместить значения в HashMap, используя только одну переменную ArrayList?

+0

Используйте 'clone()' или добавьте вызов 'new ArrayList <> (list1)' при его добавлении. Как есть, вы добавляете ту же * ссылку *. –

+0

нет. в вашем примере карта содержит '{1: [" cat "], 2: [" dog "]}' Я подозреваю, что ваш фактический код содержит 'list1.clear()' или что-то эквивалентное – njzk2

+0

У меня такой же код. Но это не работает. – CM1

ответ

1

Во-первых, нельзя объявить карту в качестве приема: HashMAP<Integer,ArrayList<String>> и положить список аргумент к нему: map.put(1, list1), Даже если Список_массивов является список, взять посмотреть на ява дженериков к anderstand почему это запрещено во всех generics.

Я проверил ваш код, и даже если вы установили новый экземпляр переменной: list1, экземпляр добавляется перед к map не будут удалены из него:

ArrayList<String> list1 = new ArrayList<String>(); 
    list1.add("cat"); 
    map.put(1, list1); 

    list1 = new ArrayList<String>(); 

    list1.add("dog"); 
    map.put(2, list1); 
    System.out.println(map.get(1).get(0)+" "+map.get(2).get(0)); 

вернется: `кошка dog '