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

Java 如何检查HashMap是否包含ArrayList的所有元素?,java,collections,arraylist,hashmap,Java,Collections,Arraylist,Hashmap,如果我有一个HashMaphashM,一个ArrayListarrayL。如果我想使用If语句检查hashM是否包含arrayL中的所有元素,我该怎么做 我现在使用的是 if(hashM.values().containsAll(arrayL.getPreReqs()) 但是它不能正常工作 亲爱的,谢谢你的回答 实际上containsAll是有效的,但是我构建代码的方式是错误的,所以我得到了错误的结果。现在已经修好了 干杯 给定 Map<?,?> map = new HashMap&

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

我现在使用的是

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

但是它不能正常工作

亲爱的,谢谢你的回答

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

干杯

给定

Map<?,?> map = new HashMap<?,?>();
List<?> list = new ArrayList<?>();
(或
map.keySet().containsAll(list)
如果您对映射键而不是值感兴趣。)

要使其像定制类型所期望的那样工作,您当然必须为它们正确地实现了
equals()
hashcode()
。(例如,请参见或更好地阅读中的第9项。)

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

List<String> list = new ArrayList<String>();
Map<Integer, String> map = new HashMap<Integer, String>();
List List=new ArrayList();
Map Map=newhashmap();
类似地,对于您的问题,更“正确”或更流畅的标题应该是“如何检查地图是否包含列表中的所有元素?”。有关更多信息,请查看

Map<?,?> map = new HashMap<?,?>();
List<?> list = new ArrayList<?>();
(或
map.keySet().containsAll(list)
如果您对映射键而不是值感兴趣。)

要使其像定制类型所期望的那样工作,您当然必须为它们正确地实现了
equals()
hashcode()
。(例如,请参见或更好地阅读中的第9项。)

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

List<String> list = new ArrayList<String>();
Map<Integer, String> map = new HashMap<Integer, String>();
List List=new ArrayList();
Map Map=newhashmap();
类似地,对于您的问题,更“正确”或更流畅的标题应该是“如何检查地图是否包含列表中的所有元素?”。有关更多信息,请查看

Map<?,?> map = new HashMap<?,?>();
List<?> list = new ArrayList<?>();
(或
map.keySet().containsAll(list)
如果您对映射键而不是值感兴趣。)

要使其像定制类型所期望的那样工作,您当然必须为它们正确地实现了
equals()
hashcode()
。(例如,请参见或更好地阅读中的第9项。)

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

List<String> list = new ArrayList<String>();
Map<Integer, String> map = new HashMap<Integer, String>();
List List=new ArrayList();
Map Map=newhashmap();
类似地,对于您的问题,更“正确”或更流畅的标题应该是“如何检查地图是否包含列表中的所有元素?”。有关更多信息,请查看

Map<?,?> map = new HashMap<?,?>();
List<?> list = new ArrayList<?>();
(或
map.keySet().containsAll(list)
如果您对映射键而不是值感兴趣。)

要使其像定制类型所期望的那样工作,您当然必须为它们正确地实现了
equals()
hashcode()
。(例如,请参见或更好地阅读中的第9项。)

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

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

类似地,对于您的问题,更“正确”或更流畅的标题应该是“如何检查地图是否包含列表中的所有元素?”。有关详细信息,请查看。

您的代码是正确的,除了

if(hashM.values().containsAll(arrayL)){..}

[编辑] 您可以使用HashMap.containsValue(对象值)

public boolean containsList(HashMap映射,列表){
对于(V值:列表){
如果(!map.containsValue(值)){
返回false;
}
}
返回true;
}

您的代码是正确的,除了

if(hashM.values().containsAll(arrayL)){..}

[编辑] 您可以使用HashMap.containsValue(对象值)

public boolean containsList(HashMap映射,列表){
对于(V值:列表){
如果(!map.containsValue(值)){
返回false;
}
}
返回true;
}

您的代码是正确的,除了

if(hashM.values().containsAll(arrayL)){..}

[编辑] 您可以使用HashMap.containsValue(对象值)

public boolean containsList(HashMap映射,列表){
对于(V值:列表){
如果(!map.containsValue(值)){
返回false;
}
}
返回true;
}

您的代码是正确的,除了

if(hashM.values().containsAll(arrayL)){..}

[编辑] 您可以使用HashMap.containsValue(对象值)

public boolean containsList(HashMap映射,列表){
对于(V值:列表){
如果(!map.containsValue(值)){
返回false;
}
}
返回true;
}

您的代码应该可以工作,但不会特别有效。您需要将列表中的每个元素与映射中的每个元素进行比较

如果(且仅当)您可以轻松地从元素中提取映射的键,则最好在
列表中循环,并对每个元素执行
map.containsKey(getKey(elem))
,这样会更快

如果您经常进行这种比较,并且无法从元素映射到键,那么它可能值得keepi