• 自定义类使用ArrayList中的remove


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

    image-20231120180004315

    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;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    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;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

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

  • 相关阅读:
    Docker搭建私有仓库
    学习用docker构建自己的镜像
    怎么复习信息系统项目管理师?
    ZooKeeper之Java API的基本使用以及应用场景的实现
    MySQL 事务的简单理解
    COMP1721 Object-Oriented Programming
    win7电脑一直闪屏是什么原因?
    【Flocking算法】海王的鱼塘是怎样炼成的
    金仓数据库KingbaseES客户端编程接口指南-DCI(6. 附录-DCI错误码)
    centos7系统下,实现1台服务器免密登录多台服务器功能
  • 原文地址:https://blog.csdn.net/qq_63432403/article/details/134515493