2012-03-10 204 views
2

在Java中,我們可以使用list.remove(Object o)方法從列表中刪除對象,此方法使用對象的equals方法標識列表中的元素。但是,這要求我們重寫equals方法(否則將使用equals方法的默認實現,這涉及比較引用)。但是,如果我們正在處理一系列對象並且開發人員沒有權利更改對象的源代碼以實現equals方法,那我們該怎麼辦?我想知道爲什麼java沒有提供像list.remove(Object o,Comparator c)這樣的方法,因爲那麼我們可以根據自定義相等條件(由比較器實現)刪除對象,解決這個問題的任何解決方案?如何從列表中刪除對象

回答

2

如果您想要任何更復雜的事情,您可以隨時迭代自己,執行所需的任何比較,然後使用List.remove(int)按索引刪除。

+0

這是複雜的,如果我有,例如三個對象刪除,那麼我將不得不遍歷非常仔細和刪除,因爲每次我刪除對象,列表的大小減少,因此如果我使用for循環(迭代直到達到列表的初始大小)可能會發生異常(因爲可能會嘗試刪除索引上的對象高於實際大小)...這我想避免 – Gaurav 2012-03-10 19:33:28

+0

@Gaurav:典型的解決方案是*要麼*每次檢查列表的大小(並減少索引)或迭代te從頭到尾。 – 2012-03-10 19:38:40

+1

或者,使用'Iterator.remove()'。 – 2012-03-10 20:38:27

1

我寫了一個小的框架是:

實現:

http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/util/Matcher.html

然後使用:

http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/util/Matchers.html

庫是開源的,可以從以下地址下載這裏:

http://sourceforge.net/projects/softsmithy/files/softsmithy/v0.1/

或者使用Maven:

<dependency> 
    <groupId>org.softsmithy.lib</groupId> 
    <artifactId>lib-core</artifactId> 
    <version>0.1</version> 
</dependency>