Ответ 1
Сделайте equals
проверку keySet()
как HashMap
s.
Примечание:
Если ваш Map
содержит ключи String
, то это не проблема, но если ваша карта содержит ключи типа objA
, вам нужно убедиться, что ваш класс objA
реализует equals()
.
Как лучше сравнить два 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.
Как я могу лучше всего сравнивать не отсортированные хеш-карты?
Сделайте equals
проверку keySet()
как HashMap
s.
Примечание:
Если ваш Map
содержит ключи String
, то это не проблема, но если ваша карта содержит ключи типа objA
, вам нужно убедиться, что ваш класс objA
реализует equals()
.
Просто используйте:
mapA.equals(mapB);
Сравнивает указанный объект с этой картой для равенства. Возвращает true если данный объект также является картой, а две карты представляют собой тот жеотображения
Сравните каждый ключ в 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;
}
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;
}
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;
}
}