地图中的LinkedList如何变化?

时间:2013-09-06 08:31:02

标签: java map linked-list

在以下代码中,我创建了一个接受LinkedList作为其值的地图。使用特定键我得到LinkedList,修改它并打印值以检查它是否被修改。

当值打印出来时,我看到它被修改了。但我不希望LinkedList中的值发生变化,直到我这样做,

map.put(for_the_same_key,modified_list) // so that old key gets replaced by this

为什么修改新LinkedList时地图中的LinkedList会发生变化。

import java.util.*;

class MapTester {

    public static void main(String args[]) {
        Map<Integer,LinkedList<String>> map = new HashMap<Integer,LinkedList<String>>();
        LinkedList<String> list = new LinkedList<String>();

        list.add("Suhail");
        list.add("Gupta");
        list.add("CSE");

        map.put(1,list);

        LinkedList<String> newList = map.get(1);
        newList.add(2,"Khayal");
        newList.remove(3);

        LinkedList<String> newListAg = map.get(1);
        for(String s : newListAg) {
            System.out.println(s);
        }       
    }
}

输出:

Suhail
Gupta
Khayal // I EXPECTED 'CSE' HERE

3 个答案:

答案 0 :(得分:3)

地图存储对列表的引用。它并不关心引用指向的对象,如果它是可变的,它可能会改变它的状态。如果您想要更改地图状态本身,则需要调用put - 更改与该关键字相关联的引用,例如将完全不同的新List与密钥相关联。

答案 1 :(得分:1)

这不是新的LinkedList

LinkedList<String> newList = map.get(1);
newList.add(2,"Khayal");
newList.remove(3);

它返回您正在修改的LinkedList中的现有Map。所以一切都按预期工作。

答案 2 :(得分:1)

您只是引用相同的列表,在下面创建新列表。

LinkedList<String> newList = map.get(1);

这就是为什么即使您修改newListlist也会被修改。

尝试按以下方式更改

LinkedList<String> newList = new LinkedList<String>(map.get(1));