java中list的clear()问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36520153/article/details/78739946

将list集合调用clear()方法,将list放入map中,再重新给list赋值。然后再将新的list放入map中,发现map中的两个list一样?

例子代码一:用list.clear()方法清空list

@Test
    public void test(){
        Map<String,List<String>> testMap = new HashMap<String, List<String>>();
        List<String> aLst = new ArrayList<String>();
        aLst.add("1");
        aLst.add("2");
        testMap.put("a", aLst); //此时map中的元素 key为a ,value为[1,2]
        System.out.println("原来的aLst " + aLst);
        System.out.println("原来的map " + testMap);
        aLst.clear();
        System.out.println("clear后的aLst " +  aLst);
        aLst.add("3");
        aLst.add("4");
        aLst.add("5");
        testMap.put("b", aLst); //此时map中的元素 key为a ,value为[1,2]
        System.out.println("后来的aLst " + aLst);
        System.out.println("后来的map " + testMap);
    }

输出结果

原来的aLst [1, 2]
原来的map {a=[1, 2]}
clear后的aLst []
后来的aLst [3, 4, 5]
后来的map {b=[3, 4, 5], a=[3, 4, 5]}

例子代码2:list = null来清空list

@Test
    public void test2(){
        Map<String,List<String>> testMap = new HashMap<String, List<String>>();
        List<String> aLst = new ArrayList<String>();
        aLst.add("1");
        aLst.add("2");
        testMap.put("a", aLst); //此时map中的元素 key为a ,value为[1,2]
        System.out.println("原来的aLst " + aLst);
        System.out.println("原来的map " + testMap);
        aLst = null;
        System.out.println("clear后的aLst " +  aLst);
        aLst.add("3");
        aLst.add("4");
        aLst.add("5");
        testMap.put("b", aLst); //此时map中的元素 key为a ,value为[1,2]
        System.out.println("后来的aLst " + aLst);
        System.out.println("后来的map " + testMap);
    }

执行结果

原来的aLst [1, 2]
原来的map {a=[1, 2]}
clear后的aLst null

例子代码三:new ArrayList()来清空list

@Test
    public void test3(){
        Map<String,List<String>> testMap = new HashMap<String, List<String>>();
        List<String> aLst = new ArrayList<String>();
        aLst.add("1");
        aLst.add("2");
        testMap.put("a", aLst); //此时map中的元素 key为a ,value为[1,2]
        System.out.println("原来的aLst " + aLst);
        System.out.println("原来的map " + testMap);
        aLst = new ArrayList<String>();
        System.out.println("clear后的aLst " +  aLst);
        aLst.add("3");
        aLst.add("4");
        aLst.add("5");
        testMap.put("b", aLst); //此时map中的元素 key为a ,value为[1,2]
        System.out.println("后来的aLst " + aLst);
        System.out.println("后来的map " + testMap);
    }

执行结果

原来的aLst [1, 2]
原来的map {a=[1, 2]}
clear后的aLst []
后来的aLst [3, 4, 5]
后来的map {b=[3, 4, 5], a=[1, 2]}

结论(猜想):

map中的value值引用的是内存地址,所以当我们new了一个新的list时,map中新增的list和原来的list才会不同。而当我们执行list = null时,list.add()方法失效并报错,猜想此时的list不再是List集合.

猜你喜欢

转载自blog.csdn.net/qq_36520153/article/details/78739946