使用removeAll所引出的问题

来源:互联网 发布:封闭式基金网络购买 编辑:程序博客网 时间:2024/05/24 06:35

这几天做项目的时候发现使用removeAll的时候出现的一个问题做一下探究

例如:list<自定义的类>   a=new ArrayList<自定义的类>();    list<自定义的类>   b=new ArrayList<E=自定义的类>();    集合b是集合a 的子集,并且集合b的size()小于集合a的size();

理论上 a.removeAll(b)  之后 a的size()应该大于0,但是结果却是0,结果真是让我大失所望啊。究竟是为什么呢?我去看了一下Java的源代码

remove的源代码

public boolean remove(Object o) {        Iterator<E> it = iterator();        if (o==null) {            while (it.hasNext()) {                if (it.next()==null) {                    it.remove();                    return true;                }            }        } else {            while (it.hasNext()) {                if (o.equals(it.next())) {                    it.remove();                    return true;                }            }        }        return false;    }</span>
再看removeall的源代码

public boolean removeAll(Collection<?> c) {        boolean modified = false;        Iterator<?> it = iterator();        while (it.hasNext()) {            if (c.contains(it.next())) {                it.remove();                modified = true;            }        }        return modified;    }</span>

我们发现removeall使用的还是remove,而remove使用了,equals,而恰巧的是我自定义的类中重写了equals。。。。找到原因了 既然知道了这个原因,我们在探究一下究竟还有哪些方法也受equals 方法的影响呢?

contains方法有木有?

 public boolean contains(Object o) {        Iterator<E> it = iterator();        if (o==null) {            while (it.hasNext())                if (it.next()==null)                    return true;        } else {            while (it.hasNext())                if (o.equals(it.next()))                    return true;        }        return false;    }</span>
其实说道equals方法就会想到 hashcode,就会想到“==”  ,有兴趣的童鞋可以看看我的其他的博文 有详细的介绍哦


0 0
原创粉丝点击