列出地图中的值

时间:2019-08-01 15:22:53

标签: java list dictionary

我希望将列表添加到地图,但无法获得所需的地图输出。 有什么办法得到下面想要的输出?

    List l = new ArrayList();

    Map<String, List<Object>> mp = new HashMap();

    l.add("A");

    mp.put("1", l);

    l.clear();
    l.add("B");

    mp.put("2", l);

    System.out.println(mp);

预期:{1 = [A],2 = [B]}

实际:{1 = [B],2 = [B]}

3 个答案:

答案 0 :(得分:3)

即使您清除了connected中的值,list仍在引用原始的Map,所以您对该列表所做的任何更改也会影响原始位置。

看一下从您的代码修改后的示例:

list

这将为每个字母Map<String, List<Object>> mp = new HashMap<>(); for (int k = 65; k <= 91; k++) { List<Object> l = new ArrayList<>(); l.add((char)k); mp.put(Integer.toString(k), l); } System.out.println(mp); Map打印A配对,并带有字母的相应ASCII值。

  

{66 = [B],88 = [X],67 = [C],89 = [Y],68 = [D] ...等...

但是,如果将代码更改为Z之前的列表,而又将代码更改为clear之前的列表,并且仅在循环外声明一次print,会发生什么情况:

new List

现在将打印以下内容:

  

{66 = [],88 = [],67 = [],89 = [],68 = [],69 = [],90 = [] ...等...

每个Map<String, List<Object>> mp = new HashMap<>(); List<Object> l = new ArrayList<>(); for (int k = 65; k <= 91; k++) { l.add((char)k); mp.put(Integer.toString(k), l); } l.clear(); System.out.println(mp); 值都为List,因为它们都引用了最后清除的 same 列表。

现在看来它们将被清除,因为在循环内我们没有清除每次迭代的Map,而只是将每个值都添加到List中,所以显然{ {1}}引用相同的List!  但是,使用Map与引用相同的List无关,它只是使其似乎,就像您没有将所有值都添加到同一列表中一样,但您确实做到了。

答案 1 :(得分:0)

    List l = new ArrayList();

    Map<String, List<Object>> mp = new HashMap();

    l.add("A");
    mp.put("1", l);

    l = new ArrayList();        
    l.add("B");
    mp.put("2", l);

    System.out.println(mp);

答案 2 :(得分:0)

列表是通过引用传递的,因此您需要创建两个不同的列表

^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]{8}$