java - 如何检查HashMap是否包含ArrayList的所有元素?

标签 java collections arraylist hashmap

如果我有一个 HashMap hashM,一个 ArrayList arrayL。如果我想使用 if 语句来检查 hashM 是否包含 arrayL 中的所有元素,我该怎么做?

我目前正在使用类似的东西

if (hashM.values().containsAll(arrayL.getPreReqs()))

但是它无法正常工作。

亲爱的,感谢您的回答!

实际上 containsAll 可以工作,但是我构建代码的方式是错误的,所以我得到了错误的结果。现在已经修复了。

干杯!

最佳答案

给定

Map<?,?> map = new HashMap<?,?>();
List<?> list = new ArrayList<?>();

您尝试的方法(嗯,几乎 as pointed out by Marko Topolnik )确实是正确的:

if (map.values().containsAll(list)) { ... }

(或者map.keySet().containsAll(list),如果您对 map 而不是感兴趣。)

要使其按自定义类型的预期工作,您当然必须为它们正确实现 equals()hashcode() 。 (参见 this question 或更好,阅读 Effective Java 中的第 9 项。)

顺便说一句,在使用 Java 集合时,最好使用接口(interface)(例如 List、Set、Map)定义字段和变量,而不是使用实现类型(例如 ArrayList、HashSet) , HashMap )。例如:

List<String> list = new ArrayList<String>();
Map<Integer, String> map = new HashMap<Integer, String>();

类似地,您的问题的更“正确”或更流畅的标题应该是“如何检查Map是否具有列表的所有元素?”。查看Java Collections tutorial了解更多信息。

关于java - 如何检查HashMap是否包含ArrayList的所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20922164/

相关文章:

java - 为什么这个基本的 JavaFX 程序无法启动?

java - 从性能的角度来看,哪个更好..arraylist 或 array?

Java 线程工作组性能与嵌入式循环性能

java - 在我的自定义 Listview Android ==> 空指针异常..?

java - 在 Java 中初始化 ArrayList 字段的最佳实践

java - 导入 csv 文件以填充 Netbeans 中表中的数据

java - GridBagLayout 无法正确布局

具有已知界限的 Java Stream 最小值

java - 为什么我的递归方法使我的程序抛出 InvalidClassException?

java - 我得到 [Ljava.lang.Object;@ 而不是 JTable 上的数据