如果我有一个 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/