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

2022-04-15 09:20 阅读 693 次 评论 0 条

自定义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 "。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:list.contains()方法判断是否包含自定义对象 | 雨晨博客
分类:JAVA, 程序笔记 标签:,

发表评论


表情