自定义类使用ArrayList中的remove

Java中ArrayList对基础类型和字符串类型的删除操作,直接用remove方法即可。但是对于自定义的类来说,用remove方法删除不了,因为没有办法确定是否是要删除的对象。

自定义类使用ArrayList中的remove_第1张图片

ArrayList中remove源码是:

public boolean remove(Object o) {
        if (o == null) {
            for (int index = 0; index < size; index++)
                if (elementData[index] == null) {
                	//进行删除
                    fastRemove(index);
                    return true;
                }
        } else {
            for (int index = 0; index < size; index++)
                if (o.equals(elementData[index])) {
                	//进行删除
                    fastRemove(index);
                    return true;
                }
        }
        return false;
    }

remove方法中,我们可以发现用到了equals方法进行判断是否两个对象相同。

因此,在自定义类中重写equals即可实现remove方法

重写equals需要判断是否是自身;this == obj,还要判断传入的对象是否是该自定义类的对象,obj instanceof OBJ,之后将传入的对象强制转为自定义类后进行判断即可。

    @Override
    public boolean equals(Object obj) {
        // 是否是本身
        if(this == obj) {
            return true;
        }
        // 是否是该类实例
        if( !(obj  instanceof Pet)) {
            System.out.println("类型错误");
            return false;
        }
        // 强制转换为该类 进行判断
        Pet p = (Pet)obj;
        if(name.equals(p.getName()) && age == ((Pet) obj).getAge()
            && color.equals(((Pet) obj).getColor())
                && weight == ((Pet) obj).weight
                && type == ((Pet) obj).getType()
        ) {
            return true;
        }
        return false;
    }

[17-4:ArrayList的contains/remove对对象操作关联equals的详解-CSDN博客](https://blog.csdn.net/kingdelee/article/details/7722869?ops_request_misc=&request_id=&biz_id=102&utm_term=java arrayList remove equals&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-7722869.142v96pc_search_result_base3&spm=1018.2226.3001.4187)

你可能感兴趣的:(Java,java)