我实现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>();
包含:
Sr: [a, b, c, d, e, f, g]
我要删除a
和b
字符:
public static removeChars(){
...
sr.remove('a');
sr.remove('b');
}
但是最后两个项目(g
和f
)已被删除。
答案 0 :(得分:2)
如果您在java.lang.Character
中使用ArrayList
,那么您不应该实施equals
。如果它是您自己的Character
,那么对remove
的调用不会创建您的课程对象 - 它会创建标准Character
对象,这就是他们不会equal
{ {1}}列表中的项目。
如果这是问题,那么您需要确保将课程实例传递给remove
,而不是依赖autoboxing:
sr.remove(new Character('a'));
或者,如果您使用的是Java 8,则可以显式实现equalsChar
方法并在谓词中调用它:
sr.removeIf(c -> c.equalsChar('a'));
这样做的好处是可以删除所有实例(不仅仅是第一个实例),这通常是List
而不是Set
所需要的。