判斷map是否包含另一個map


  判斷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);
     。。。
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM