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