我实现了 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);
}
这是我的数组列表:
static ArrayList<Character> sr = new ArrayList<Character>();
包含:
Sr: [a, b, c, d, e, f, g]
我要删除 a
和 b
字符:
public static removeChars(){
...
sr.remove('a');
sr.remove('b');
}
但最后两项(g
和 f
)始终被删除。
最佳答案
如果您在 ArrayList
中使用 java.lang.Character
,那么您不需要实现 equals
。如果它是您自己的 Character
,那么对 remove
的调用不会创建您的类的对象 - 它会创建标准的 Character
对象,这就是它们不这样做的原因不等于
列表中的项目。
如果这是问题所在,那么您需要确保将类的实例传递给对 remove
的调用,而不是依赖 autoboxing :
sr.remove(new Character('a'));
或者,如果您使用 Java 8,您可以显式实现 equalsChar
方法并在谓词中调用它:
sr.removeIf(c -> c.equalsChar('a'));
这样做的优点是可以删除所有实例(而不仅仅是第一个实例),这通常是 List
而不是 Set
所需要的。
关于java - 按值从数组列表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31909499/