java - 列出 map 中的值

标签 java list dictionary

我希望将列表添加到 map ,但无法获得所需的 map 输出。 有什么方法可以获得以下所需的输出吗?

    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]}

最佳答案

即使您清除了 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);

这将打印每个字母 AZMap 配对以及该字母各自的 ASCII 值。

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

但是,如果您将代码更改为清除列表,就像您在print之前的代码中所做的那样,并且仅声明一个新列表循环外一次:

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);

现在将打印:

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

Map 中的每个 List 值都是空白,因为它们都引用最后清除的相同列表。

现在看起来很明显它们都会被清除,因为在循环内部我们没有清除每次迭代的 List ,只是将每个值添加到 List all 中在一起,所以显然 Map 引用了相同的 List! 但是,使用 clear 与是否引用相同的 list 无关,它只是让它看起来就像您不只是添加所有将值放入同一个列表中,但您做到了。

关于java - 列出 map 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57312302/

相关文章:

python - 如何从 python 中的字典列表中唯一和排序值?

matlab - 如何在Matlab中从Dictionary.com下载MP3文件?

java - 我应该使用哪种方法(最快)来选择元素?

java - libGDX 客户端(服务器)客户端连接

java - 自旋锁的替代品

Python 将嵌套元组列表转换为字典

java - Java 中的 ArrayList 的 ArrayList - 缩短代码

java - 如何在 AWS Elastic Beanstalk 上设置编码?

python - 在python dict中访问多个值

python - 问题将 IP 地址字符串从 for 循环附加到列表