【问题标题】:Mapping an integer to a List using HashMap [duplicate]使用 HashMap 将整数映射到列表 [重复]
【发布时间】:2019-01-24 05:39:25
【问题描述】:

我编写了以下代码来将键与字符串列表相关联。当我显示它时,键 '2' 的列表值被键 '4' 的值替换。不应该是 '2 ' 指向它被映射到的值?

 Map<Integer,List<String>>hm=new TreeMap<Integer,List<String>>();
 List<String>l=new ArrayList<String>();
 l.add("tree");
 l.add("tyre"); 
 hm.put(2, l);
 l.clear();
 l.add("treaaae");
 l.add("tyret");
 l.add("treeeqqq");
 l.add("tyreqww");
 hm.put(4, l);

【问题讨论】:

  • hm.put(2, l) 不会将您的列表复制到地图中。因此,当您稍后致电l.clear() 时,您正在清除与地图中相同的列表。您可以这样做以使其工作:hm.put(2, new ArrayList&lt;&gt;(l));

标签: java string list hashmap


【解决方案1】:

问题是你一直使用列表l,所以实际上项目2和4都指向同一个列表。

这将起作用:

Map<Integer,List<String>>hm=new TreeMap<Integer,List<String>>();
List<String>l=new ArrayList<String>();
l.add("tree");
l.add("tyre"); 
hm.put(2, l);
List<String>m=new ArrayList<String>();
m.add("treaaae");
m.add("tyret");
m.add("treeeqqq");
m.add("tyreqww");
hm.put(4, m);

【讨论】:

  • 所以我们每次放一个键时都会创建新的列表对象......
  • @user10040367 这就是它的工作原理:) 如果你想要一个包含 2 个列表的列表的 hashMap,你必须创建 2 个列表。也许你的目的不同,有不同的处理方式?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2019-08-02
  • 1970-01-01
  • 2016-08-31
  • 2018-03-25
  • 2011-04-18
相关资源
最近更新 更多