Java中判斷兩個列表是否相等

CollectionUtils.isEqualCollection(final Collection a, final Collection b)
CollectionUtils工具類中有一個查看兩個Collection是否相等的方法。
public static boolean isEqualCollection(final Collection a, final Collection b) {
        if(a.size() != b.size()) {
            return false;
        } else {
       //獲取以對象爲鍵以對象的數量位置的Map
            Map mapa = getCardinalityMap(a);
            Map mapb = getCardinalityMap(b);
            if(mapa.size() != mapb.size()) {
                return false;
            } else {
                Iterator it = mapa.keySet().iterator();
                while(it.hasNext()) {
                    Object obj = it.next();  
                    //獲取對象的數量,判斷是否相等
            if(getFreq(obj,mapa) != getFreq(obj,mapb)) { return false; } } return true; } } }

主要的方法是getCardinalityMap(Collection coll)方法,返回的結果是以對象爲鍵,以對象的數量爲值的Map。工具

   public static Map getCardinalityMap(final Collection coll) {
        Map count = new HashMap();
        for (Iterator it = coll.iterator(); it.hasNext();) {
            Object obj = it.next();
            Integer c = (Integer) (count.get(obj));
            if (c == null) {
                count.put(obj,INTEGER_ONE);
            } else {
                count.put(obj,new Integer(c.intValue() + 1));
            }
        }
        return count;
    }

  從Map中獲取對象數量的方法spa

    private static final int getFreq(final Object obj, final Map freqMap) {
        Integer count = (Integer) freqMap.get(obj);
        if (count != null) {
            return count.intValue();
        }
        return 0;
    }

注意:這裏兩個Collection中的對象須要實現hashcode()和equals()方法code

相關文章
相關標籤/搜索