Java 如何从列表中删除对象

Java 如何从列表中删除对象,java,list,object,equals,Java,List,Object,Equals,在Java中,我们可以使用list.remove(object o)方法从列表中删除对象,该方法使用对象的equals方法来标识列表中的元素。但是,这要求我们重写equals方法(否则将使用equals方法的默认实现,这涉及比较引用)。但是,如果我们处理的是一系列对象,而开发人员没有权利更改对象的源代码来实现equals方法,我们该怎么办?我想知道为什么java没有提供像list.remove(对象o,比较器c)这样的方法,因为这样我们就可以根据自定义的相等条件(由比较器实现)删除对象,这个问题

在Java中,我们可以使用list.remove(object o)方法从列表中删除对象,该方法使用对象的equals方法来标识列表中的元素。但是,这要求我们重写equals方法(否则将使用equals方法的默认实现,这涉及比较引用)。但是,如果我们处理的是一系列对象,而开发人员没有权利更改对象的源代码来实现equals方法,我们该怎么办?我想知道为什么java没有提供像list.remove(对象o,比较器c)这样的方法,因为这样我们就可以根据自定义的相等条件(由比较器实现)删除对象,这个问题有什么解决方案吗?

如果你想要更复杂的东西,你可以自己迭代,执行你想要的任何比较,然后使用按索引删除。

我为此编写了一个小框架:

实施:

然后使用:

该库是开源的,可以从以下位置下载:

或者与Maven一起:

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

org.softsmithy.lib
库核
0.1

这很复杂,例如,如果我有三个要删除的对象,那么我必须非常小心地循环并删除,因为每次删除一个对象时,列表的大小都会减小,因此如果我使用for循环(迭代直到达到列表的初始大小),可能会出现异常(因为可能有人试图删除索引上高于实际大小的对象)avoid@Gaurav:典型的解决方案是每次检查列表的大小(并减少索引)或从末尾到前面迭代。