gpt4 book ai didi

java - 列出 map 中的值

转载 作者:行者123 更新时间:2023-11-30 07:40:39 25 4
gpt4 key购买 nike

我希望将列表添加到 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);

这将为每个字母 AZ 打印一个 Map 对,以及该字母各自的 ASCII 值。

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

但是,如果您将代码更改为 clear 列表,就像在 print 之前的代码中一样,并且只声明一个 new List 循环外的一次:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com