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)。

最佳答案

如果在java.lang.Character中使用ArrayList,则无需实现equals。如果是您自己的Character,则对remove的调用不是在创建您的类的对象-它是在创建标准的Character对象,这就是为什么它们不equal列表中的项目的原因。

如果这是问题所在,则需要确保将类的实例传递给对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 - 在方法参数列表中使用ArrayList或List

java - 第一个列表已排序,另一个列表现在未排序,这是合并两个列表的更好方法

java - 在自己的cmd.exe中运行工具

java - 使用BCrypt加载测试数据

java - 任何人都可以告诉我这个伪代码怎么了?

java - 从数组列表中删除对象

java - 在保存在文件中的ArrayList中搜索数据,并在texfield中打印出来

java - notifyDataSetChanged不起作用。我收到短信时的ListView未更新

java - 机器人方法如何访问类中的两个不同对象

java - JOLT:需要拆分数组并与其他详细信息结合