2012-11-16 94 views
2

我有一個包含多個變量的對象的數組列表。覆蓋Android活動中的ArrayList.equals

我生成新的對象,並希望有條件地檢查以查看具有相同內容的對象不存在任何在arraylist中。

不幸的是,Arraylist.contains(object)和Arraylist.equals(object)只檢查同一對象的引用,而不是具有相同組件的對象。我希望它表現得像一個簡單的String.contains(「x」)。

如何重寫arraylist.equals/arraylist.contains在我的android活動中做我想做的事情?

+0

對不起,如果我誤解了這個問題,但你不應該重寫ArrayList上的equals。 ArrayList的equals(Object o)和Contained(Object o)方法都調用其中每個對象的equals方法。所以如果你只是進行淺層比較,那是因爲你放入ArrayList的對象沒有重寫equals方法來正確地比較它自己的組件。 – combinatorics

+0

@combinatorics,哦!這個很明顯,謝謝你指出這個 – CQM

+0

沒有probs。我將發表我的原始評論作爲答案,以便我們可以關閉此問題。 – combinatorics

回答

2

您可以創建自己的繼承自ArrayList的類併爲兩者定義自己的定義。

public class myArrayList<E> extends ArrayList<E> { 
    @Override 
    public Boolean equals(object o) { 
     //Your implementation 
    } 
    @Override 
    public Boolean contains(object o) { 
     //Your implementation 
    } 
} 

然後用MyArrayList類型取代你的ArrayList類型。

或者你可以在某處接受2個ArrayLists並告訴你它們是否相等,或者是否包含另一個。

public static Boolean areArrayListsEqual(ArrayList a, ArrayList b) { 
    //Check if they are equal 
} 
2

ArrayList的equals(Object o)和contains(Object o)方法都調用其中每個對象的equals方法。所以如果你只是進行淺層比較,那是因爲你放入ArrayList的對象沒有重寫equals方法來正確地比較它自己的組件。