判断map是否包含另一个map:
map不同与list集合,list集合有直接判断集合是否包含其他集合或者元素的方法。
-
boolean contains(Object o)
如果list包含指定的元素,则返回true。
-
boolean containsAll(Collection<?> c)
如果list包含指定collection的所有元素,则返回true。
map虽然没有直接判断是否包含其他map的方法,但是map有根据key或者value是否存在与map中的方法。
-
containsKey(Object key)
如果此映射包含对于指定key的映射关系,则返回true。
-
containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回true。
有了上面的两个方法,就可以采取其他转换的方式去判断了。思路如下:
由于只能比较key和value,而要判断map是否包含另一个map,那就要同时比较key与value,方法可以是:将key和value改造成特定格式的字符串,作为key或者value,在进行比较key或者value,就可以达到同时比较key和value的效果了。
当然这个过程中还用到了map的遍历: map遍历有多种方式:
1、Map.Entry遍历
for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue()); }
这种方式可以获取到key和value。
2、keySet遍历
for (Integer key : map.keySet()) { System.out.println("key = " + key); }
这种方式遍历遍历key
3、values遍历
for (Integer value : map.values()) { System.out.println("key = " + value); }
这种方式遍历value。
4、Iterator遍历
Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<Integer, Integer> entry = it.next(); System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue()); }
简单示例如下:
public static void main(String[] args) { Map<String, String> map1 = new HashMap<>(); Map<String, String> map2 = new HashMap<>(); Map<String, String> mapA = new HashMap<>(); map1.put("a", "b"); map1.put("b", "d"); map1.put("a", "c"); map1.put("e", "r"); map2.put("a", "b"); map2.put("a", "c"); for (Map.Entry<String, String> entry : map1.entrySet()) { String map1Key = entry.getKey(); String map1Value = entry.getValue(); String map1KeyVal = map1Key + ":" + map1Value; String map1ValKey = map1Value + ":" + map1Key; mapA.put(map1KeyVal, map1ValKey); } // 判断map1是否包含map2 for (Map.Entry<String, String> entry : map2.entrySet()) { String map2Key = entry.getKey(); String map2Value = entry.getValue(); String map2KeyVal = map2Key + ":" + map2Value; boolean keyExist = mapA.containsKey(map2KeyVal); boolean valExist = mapA.containsValue(map2KeyVal); if (keyExist == false){ System.out.println("map1 不包含 map2"); } } }
在查看Map.Entry的方法时发现entry有一个equal()方法,可以比较单个的map,但在使用的还是需要去做变通:
示例:
for (Map.Entry<String, String> entry : map1.entrySet()) { for (Map.Entry<String, String> entry2 : map2.entrySet()){ boolean result = entry.equals(entry2); 。。。 } }