2012-03-10 165 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>