ArrayList的remove方法的一个特性

记录昨天在群里面学到的ArrayList的remove方法的特性,测试代码如下:

public class ListRemove
{
    public static void main(String[] args)
    {
        List<Object> list = new ArrayList<Object>();
        Student student = new Student();
        Teacher teacher = new Teacher();
        list.add(teacher);
        list.remove(teacher);
        System.out.println("remove(teacher)后list.size() = " + list.size());
        list.remove(student);
        System.out.println("remove(student)后list.size() = " + list.size());
    }
}

class Student
{
    @Override
    public boolean equals(Object obj)
    {
        return true;
    }
}

class Teacher
{
    @Override
    public boolean equals(Object obj)
    {
        return false;
    }
}

方法最终的打印结果为:

remove(teacher)后list.size() = 1
remove(student)后list.size() = 0

结果分析(附录有ArrayList的remove方法源码):
1.当list调用remove方法remove(teacher)时,首先会调用teacher类中的equal方法判断两个对象是不是同一个对象,但由于teacher类中直接就返回了false,及teacher.equal(teacher) = false;则list中没有元素可以删除,故list.size()仍为1;
2.同理,当list调用remove方法remove(student)时,比较为true,即student.equals(teacher)=true,因此不管list中存放的是什么类型的数据,list都会remove成功。
3.在源码 中传入参数为student时o.equals(elementData[index])一直为true,删除成功。

附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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值