list.contains()方法判断是否包含自定义对象

自定义class:

public class User implements Serializable {

    private static final long serialVersionUID = -5604740934665227785L;

    private String name;
    private Integer age;
    private Date birthday;

如果一个list中存入了许多user对象,如何使用contains方法判断该list是否包含某个对象呢?

首先list.contains()方法判断是否包含,需要在user中复写equals()方法

复写方法时需要确认如何认定user

比如俩个user的name属性相同,不管age和birthday是否相同,都认为这两个user是同一个user,那么我们在复写equals()方法时,只需要复写name字段的equals()方法

如果name和age俩个字段才能确定俩个user是否相同,那么就需要复写name和age这两个字段的equals()方法;

下面我认为俩个user类,只要age相同,就认为是这俩个user类是相同的,在user类中复写了针对age字段的equals()方法:

@Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (other.getAge() == null) {
            return false;
        }
        if (age == null) {
            if (other.age != null)
                return false;
        } else if (!age.equals(other.age))
            return false;
        return true;
    }

写完equals()方法后,进行test:

ArrayList<User> list = new ArrayList<User>();
        for (int i = 0; i < 3; i++) {
            User user1 = new User();
            user1.setAge(i+10);
            user1.setName("张三"+i);
            user1.setBirthday(new Date());
            list.add(user1);
          
        }
        User user2 = new User();
        user2.setAge(11);
        user2.setName("李四");
      
        System.out.println(list.contains(user2));
        System.out.println(list.indexOf(user2));
        System.out.println(list.get(list.indexOf(user2)));

test中,new一个list在for循环中add三个user1,三个user1的name是张三,但是年龄分别是10,11,12

另外new一个user2,将age设为11,name设为李四

虽然两个user的name属性不同,但是用contains方法返回了true,同时用indexOf()方法返回了索引" 1 "

  • 7
    点赞
  • 2
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值