Java 按值从arraylist中删除
我实现了Java 按值从arraylist中删除,java,arraylist,Java,Arraylist,我实现了equals(),以便能够按值删除数组列表元素: public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; if (!(obj instanceof Character)) return false; Character ch = (Character) obj; return ch.equals(this); }
equals()
,以便能够按值删除数组列表元素:
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj == this) return true;
if (!(obj instanceof Character)) return false;
Character ch = (Character) obj;
return ch.equals(this);
}
这是我的arraylist:
static ArrayList<Character> sr = new ArrayList<Character>();
我将删除a
和b
字符:
public static removeChars(){
...
sr.remove('a');
sr.remove('b');
}
但是最后两项(
g
和f
)总是被删除。如果您在ArrayList
中使用java.lang.Character
,则不需要实现equals
。如果是您自己的字符
,那么调用删除
并不是创建类的对象-而是创建标准的字符
对象,这就是为什么它们不等于列表中的项目
如果这是问题所在,那么您需要确保将类的实例传递给调用remove
,而不是依赖于:
或者,如果您使用的是Java 8,则可以显式实现equalsChar
方法,并在谓词中调用它:
sr.removeIf(c -> c.equalsChar('a'));
这样做的好处是删除所有实例(而不仅仅是第一个实例),这通常是列表(而不是集)所需的,而字符是您编写的自定义类(或者是java.lang.Character
?)。哪个类包含您发布的equals
方法?@MickMnemonic它看起来像是在调用remove
时自动装箱的,这意味着它必须是java.lang.Character
对吗?虽然我不知道为什么OP会在这种情况下实现自定义的equals
。是的,在removeChars
中似乎就是这样,这让我想知道equals
实现在哪里。似乎问题中省略了很多相关代码。@MickMememonic我猜这是一个自定义字符,OP不知道自动装箱是如何工作的。我已经回答了这个假设。@Mick助记符不,它不是自定义类,Character
是java.lang.Character
sr.remove(new Character('a'));
sr.removeIf(c -> c.equalsChar('a'));