今天遇到了比较两个map中的值是否一致的问题,具体是前端传一个json字符串,我将其转换成map,之后与数据库中的map进行比对。
- 脑中的第一反应,取entry进行遍历,马上否决,太麻烦了。然后想法是先判断map1的keySet是否containsAll()map2的keySet,不满足的话就不用去遍历了,当然也否决掉了。
- 之后是尝试equals方法,结果竟然成功了,效果如图:
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));
}
看了一下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;
}
总结
- 比较两个hashmap的值是否一致的话,直接使用equals方法即可。