ArrayList的remove方法的一个特性

来源:互联网 发布:制作生日快乐的软件 编辑:程序博客网 时间:2024/06/04 19:56

记录昨天在群里面学到的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() = 1remove(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;    }
0 0
原创粉丝点击