Java - 使用 HashMap 和 List<> 作为键

标签 java arraylist hashmap

我正在尝试将 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 对象时会发生什么?为什么它不起作用?

我在下面的这个新示例中获得了相同的结果。 (每个列表计数相同的 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 个字符,这没问题

最佳答案

你不懂HashMap的概念.

您的问题是您每次都使用相同的 key 。

testMap4.put(lst, 1);     // <----same key, different value
testMap4.put(lst, 2);     // <----same key, different value
testMap4.put(lst, 5);     // <----same key, different value

Hashmap ,存储在 Hashmap 中的每个值, 有一个 key与该特定值一起保存并且对于存储在 Hashmap 中的每个值都是唯一

关于 HashMap 的要点:

1- HashMap 包含基于键的值。

2- 它只包含独特的元素。

3- 它可能有一个空键和多个空值。

4- 它没有秩序。

示例

 HashMap<Integer,String> hm = new HashMap<>();  

其次,如果任何列表在插入映射后被修改,使用可变对象(List<>)作为键会导致未定义的行为。哈希码根据合约计算为List (请参阅 Javadoc)仅当条目首次插入 map 时。更改列表内容将更改哈希码,您将无法再找到该条目。

使用 List<> (或任何可变对象)作为 HashMap<> 中的键是一个非常糟糕的主意™

关于Java - 使用 HashMap 和 List<> 作为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42182116/

相关文章:

java - 有没有办法让 if(null) 做某事

java - 创建一个桌面应用程序以将我们的输入状态显示为图形

java - 在 Mac 上的 Android Studio 中找不到 OnePlus One

java - jsp中如何获取数组中的值

使用多个选择框的 JavaFX 过滤 ListView

java - 递归获取列表元素

java - 在 Java 8 中使用 Lambda 将流收集到 HashMap

java - 如何从标题为全名缩写的列表生成 .txt 文件

java - .NET 中的 List 是否与 Java 中的 arraylist 一样工作?

java - HashMap - 获取与某个键关联的所有值