初级程序员 - List.contains()的问题

   判断List中是否存在指定对象时,可用List<T>.contains()方法,但是在使用不同内存地址的对象时,判断错误的问题。

   contains()方法内是使用equals方法。下面为源码:

public boolean contains(Object o) {   
    return indexOf(o) >= 0;   
    }   
  
  
 public int indexOf(Object o) {   
    if (o == null) {   
        for (int i = 0; i < size; i++)   
        if (elementData[i]==null)   
            return i;   
    } else {   
        for (int i = 0; i < size; i++)   
        if (o.equals(elementData[i]))   
            return i;   
    }   
    return -1;   
    }  


然而equals方法在比较对象时是在比较对象的内存地址,所以在下面的代码中会出现返回为false的情况

List<Model> modelList = ArrayList<Model>();

Model model1 = new Model();

Model model2 = new Model();

modelList.add(model1);

modelList.add(model2);

Model model3 = new Model();

if(modelList.contains(model3)){

    .....

}


在这里model3的内容实际上是和model1的一样,但是 modelList.contains(model3)返回为false。

所以在这里我们需要重写Model中的equals方法

下面为通过对象中的某个值得判断:

    public boolean equals(Object object) {
        if (object != null && object instanceof Model) {
            return this.getId() == ((Model) object).getId();
        }
        return false;
    }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值