2012-03-10 5 views
2

Javaでは、list.remove(Object o)メソッドを使用してリストからオブジェクトを削除できます。このメソッドは、オブジェクトのequalsメソッドを使用してリスト内の要素を識別します。しかし、これにはequalsメソッドをオーバーライドする必要があります(そうでなければ、参照を比較するequalsメソッドのデフォルトの実装が使用されます)。しかし、オブジェクトのリストを扱っていて、開発者がオブジェクトのソースコードを変更してequalsメソッドを実装する自由がない場合は、どうすればよいですか?私はなぜjavaがlist.remove(Object o、Comparator c)のようなメソッドを提供していないのだろうかと疑問に思っています。これはカスタム等価条件(コンパレータで実装されています)リストからオブジェクトを削除する方法

答えて

2

もっと複雑なものが必要な場合は、いつでも自分の反復を行い、任意の比較を実行してから、List.remove(int)を使用してインデックスで削除できます。

+0

たびに、私は削除するので、私は、例えば3つのオブジェクトは、その後、私は非常に慎重をループしており、削除なり、削除している場合、これは、複雑ですリストのサイズが小さくなります。したがって、forループ(リストの最初のサイズに達するまで繰り返します)を使用すると例外が発生する可能性があります(インデックス上のオブジェクトを削除しようとする可能性があるためです)。実際のサイズよりも高い)...これを回避したい – Gaurav

+0

@ Gaurav:その典型的な解決策は、リストのサイズを毎回(そしてインデックスを減らす)最後から最後まで。 –

+1

または、 'Iterator.remove()'を使用してください。 –

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> 
関連する問題