按值从arraylist中删除

时间:2015-08-09 22:35:48

标签: 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);
}

这是我的arraylist:

static ArrayList<Character> sr = new ArrayList<Character>();

包含:

Sr: [a, b, c, d, e, f, g]

我要删除ab字符:

public static removeChars(){

    ...
    sr.remove('a');
    sr.remove('b');

}

但是最后两个项目(gf)已被删除。

1 个答案:

答案 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所需要的。