【发布时间】:2017-06-30 03:26:39
【问题描述】:
我正在尝试将 HashMap 和 Hastable 与对象列表一起用作键。 请看下面我的代码的简化版本,它不起作用。 当我调试这段代码时,我希望 TestMap4 对象中有 3 个项目,但只有 1 个。
List<String> lst = new ArrayList<>();
lst.add("Hello");
lst.add("World");
Map<List<String>, Integer> testMap4 = new HashMap<List<String>, Integer>();
testMap4.put(lst, 1);
testMap4.put(lst, 2);
testMap4.put(lst, 5);
当我将一个新项目放入 HashMap 对象时会发生什么?为什么它不起作用?
我在下面的这个新示例中获得了相同的结果。 (每个 List 都包含相同的 2 个字符串)
List<String> lst = new ArrayList<>();
lst.add("Hello");
lst.add("World");
List<String> lst2 = new ArrayList<>();
lst2.add("Hello");
lst2.add("World");
List<String> lst3 = new ArrayList<>();
lst3.add("Hello");
lst3.add("World");
Map<List<String>, Integer> testMap4 = new HashMap<List<String>, Integer>();
testMap4.put(lst,1);
testMap4.put(lst2,2);
testMap4.put(lst3,5);
如果我只修改 2 个字符串的 1 个字符,这没关系
【问题讨论】:
-
您误解了地图的键/值部分:tutorialspoint.com/java/java_hashmap_class.htm。 Map 只能有 1 个值,即与 1 个唯一键相关联。您使用相同的键放置值,因此每次都覆盖现有值
-
数字 1、2 和 5 的含义是什么?您是否试图将列表(同一个列表)与键 1,2 和 5 放在一起。如果是这样,您的键和值是错误的
-
有没有办法修改每个项目列表的哈希码以将其标识为唯一?