今天遇到了比較兩個map中的值是否一致的問題,具體是前端傳一個json字符串,我將其轉(zhuǎn)換成map,之后與數(shù)據(jù)庫中的map進(jìn)行比對。
- 腦中的第一反應(yīng),取entry進(jìn)行遍歷,馬上否決,太麻煩了。然后想法是先判斷map1的keySet是否containsAll()map2的keySet,不滿足的話就不用去遍歷了,當(dāng)然也否決掉了。
- 之后是嘗試equals方法,結(jié)果竟然成功了,效果如圖:
public static void main(String[] args) {
Map<Integer,Integer> map1 = new HashMap<>();
map1.put(1,3);
map1.put(2,3);
map1.put(3,4);
Map<Integer,Integer> map2 = new HashMap<>();
map2.put(1,3);
map2.put(3,4);
map2.put(2,3);
System.out.println(map1.equals(map2));
}

結(jié)果.png
看了一下jdk源碼,恍然大悟
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Map))
return false;
Map<?,?> m = (Map<?,?>) o;
if (m.size() != size())
return false;
try {
Iterator<Entry<K,V>> i = entrySet().iterator();
while (i.hasNext()) {
Entry<K,V> e = i.next();
K key = e.getKey();
V value = e.getValue();
if (value == null) {
if (!(m.get(key)==null && m.containsKey(key)))
return false;
} else {
if (!value.equals(m.get(key)))
return false;
}
}
} catch (ClassCastException unused) {
return false;
} catch (NullPointerException unused) {
return false;
}
return true;
}
總結(jié)
- 比較兩個hashmap的值是否一致的話,直接使用equals方法即可。