Java 如何检查HashMap是否包含ArrayList的所有元素?
如果我有一个HashMapJava 如何检查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&
hashM
,一个ArrayListarrayL
。如果我想使用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