ArrayList的remove()方法源码解读

本文详细介绍了ArrayList如何通过索引和对象删除元素,重点强调了在删除自定义类对象时,需要重写equals方法的原因。如果不重写,将导致无法正确删除目标对象,因为默认使用的是Object的equals方法,它基于引用地址进行比较。
摘要由CSDN通过智能技术生成

1、通过索引删除

remove(index);

2、通过对象删除

public Boolean remove(Object obj){
    // 如果对象为null,遍历集合查找集合中是否有为null的元素 
    if(obj == null) {
        for(int index; index < size; index++){
            if(elementData[index] == null) {
                fastRemove(index);
                return true;
            }
        }
    } else {
        for(int index; index < size; index++) {
            // 通过equals()方法比较是否为同一对象
            if(obj.equals(elementData[index])) {
                fastRemove(index);
                return true;
            }
        }
    }
    return false;
}

注意:

ArrayList的remove(Object obj)方法判断是否为同一个对象的时候用的是equals方法,如果我们要移除list中的自定义类的时候需要重写equals方法,否则调用父类Object 的 equals方法,比较两个元素是否为同一对象的时候底层是通过==比较的(比较引用类型的引用地址),导致删除不了目标对象的方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值