美文网首页Java 杂谈程序员
比较两个Map是否相同

比较两个Map是否相同

作者: alonwang | 来源:发表于2018-09-17 12:35 被阅读15次

    结论:对于所有继承于AbstractMap的map类(基本上jdk中的map都继承了),直接使用Map.equals()即可

    AbstractMap重写了equals方法,保证对两个相同内容的map调用equals比较结果为真,源码如下

    
        public boolean equals(Object o) {
            //同一对象相等
            if (o == this)
                return true;
            //不是Map的子类不相等
            if (!(o instanceof Map))
                return false;
            Map<?,?> m = (Map<?,?>) o;
            //元素数量不同不相等
            if (m.size() != size())
                return false;
            //遍历
            try {
                for (Entry<K, V> e : entrySet()) {
                    K key = e.getKey();
                    V value = e.getValue();
                    //空值特殊处理
                    if (value == null) {
                        if (!(m.get(key) == null && m.containsKey(key)))
                            return false;
                    } else {
                        //调用元素的equals比较
                        if (!value.equals(m.get(key)))
                            return false;
                    }
                }
            } catch (ClassCastException unused) {
                return false;
            } catch (NullPointerException unused) {
                return false;
            }
    
            return true;
        }
    

    相关文章

      网友评论

        本文标题:比较两个Map是否相同

        本文链接:https://www.haomeiwen.com/subject/hiaknftx.html