使用removeAll所引出的问题

这几天做项目的时候发现使用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,就会想到“==”  ,有兴趣的童鞋可以看看我的其他的博文 有详细的介绍哦


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值