Подтвердить что ты не робот

Сравнение двух хэш-карт для равных значений и одинаковых наборов ключей?

Как лучше сравнить два HashMap s, если я хочу узнать, не содержит ли кто-либо из них других ключей, а если значения этих ключей совпадают друг с другом.

Map<objA, objB> mapA = new HashMap<objA, objB>();
mapA.put("A", "1");
mapA.put("B", "2");

Map<objA, objB> mapB = new HashMap<objA, objB>();
mapB.put("D", "4");
mapB.put("A", "1");

При сравнении A с B он должен выйти из строя из-за разных клавиш B и D.

Как я могу лучше всего сравнивать не отсортированные хеш-карты?

4b9b3361

Ответ 1

Сделайте equals проверку keySet() как HashMap s.

Примечание:

Если ваш Map содержит ключи String, то это не проблема, но если ваша карта содержит ключи типа objA, вам нужно убедиться, что ваш класс objA реализует equals().

Ответ 2

Просто используйте:

mapA.equals(mapB);

Сравнивает указанный объект с этой картой для равенства. Возвращает true если данный объект также является картой, а две карты представляют собой тот жеотображения

Ответ 3

Сравните каждый ключ в mapB с сопоставлением в mapA. Затем проверьте, есть ли какой-либо ключ в mapA, не существующий в mapB

public boolean mapsAreEqual(Map<String, String> mapA, Map<String, String> mapB) {

    try{
        for (String k : mapB.keySet())
        {
            if (!mapA.get(k).equals(mapB.get(k))) {
                return false;
            }
        } 
        for (String y : mapA.keySet())
        {
            if (!mapB.containsKey(y)) {
                return false;
            }
        } 
    } catch (NullPointerException np) {
        return false;
    }
    return true;
}

Ответ 4

public boolean compareMap(Map<String, String> map1, Map<String, String> map2) {

    if (map1 == null || map2 == null)
        return false;

    for (String ch1 : map1.keySet()) {
        if (!map1.get(ch1).equalsIgnoreCase(map2.get(ch1)))
            return false;

    }
    for (String ch2 : map2.keySet()) {
        if (!map2.get(ch2).equalsIgnoreCase(map1.get(ch2)))
            return false;

    }

    return true;
}

Ответ 5

private static int comparingTwoHashMap(Map<String, String> mapA, Map<String, String> mapB) {
    if (mapA != null && mapB != null && mapA.size() == mapB.size()) {
        for (Map.Entry m : mapA.entrySet()) {
            String keyFromFirstMap = (String) m.getKey();
            String valueFromFirstMap = (String) m.getValue();
            String valueFromSecondMap = mapB.get(keyFromFirstMap);

            if (!valueFromFirstMap.equals(valueFromSecondMap)) {
                return 0;
            }
        }
        return 1;
    } 
    else {
        return 0;
    }
}