java - 按值从数组列表中删除

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

这是我的数组列表:

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)始终被删除。

最佳答案

如果您在 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/

相关文章:

java - 如何使用 jaxb 在 XML 中自动递增 id

java - 在 Apache lucene 中导入 org.apache.lucene.analysis.SimpleAnalyzer 符号未找到错误

java - 堆外、 native 堆、直接内存和 native 内存有什么区别?

java - 就像数组列表中的计数器不断返回 0

java - 为什么在这个例子中使用 Bean——它看起来像是毫无意义的间接?

java - 如何从 java 中使用 Crossover 启动命令行应用程序?

java - 使用字符串数组从对象数组列表中删除项目 - android

vb.net - 将非常大的 .csv 导入 List 数组,然后复制到 DataTable

Java - 传递接口(interface)类型的ArrayList

java - 按创建顺序对 ArrayList<String> 进行排序 [Android/Java]