今天用到了List的contains()方法,代码心得如下:
package com.young.test; import java.util.ArrayList; import java.util.List; /** * list<E>的 contains方法会调用list中E的equals()方法。 * 普通类equals()比较的是引用。 * 而String的equals()比较的是值,因为java对String的equals()方法进行了重写。 */ public class ListContains { public static void main(String[] args) { List<Person> pList = new ArrayList<Person>(); Person pp = new Person(); for (int i = 0; i < 15; i++) { Person p = new Person(); p.setId(String.valueOf(i)); p.setName(i + "_name"); p.setAge(String.valueOf(i + 10)); if (i == 14) { pp = p;//记录最后一个元素,引用传递 } if (i % 2 == 0) { p.setSex("男"); } else { p.setSex("女"); } pList.add(p); } for (Person p1 : pList) { System.out.println(p1.getId() + p1.getName() + p1.getSex() + p1.getAge()); } Person p2 = new Person(); p2.setAge("24"); p2.setName("14_name"); p2.setId("14"); p2.setSex("男"); /** * 如果不重写Person的equals()方法,那么比较的是引用,结果为不包含;把p2换成pp结果为 包含。 */ if (pList.contains(p2) == true) { System.out.print("包含"); } else { System.out.print("不包含"); } } } class Person { private String id; private String name; private String age; private String sex; /** * 重写对象的eqauls()方法。 */ @Override public boolean equals(Object obj) { System.out.println("Peson equals()方法调用!"); Person p = (Person) obj; /* * String对象 "=="比较的是引用,而String 的equals()方法比较的才是值。 * if (p.getId() == this.id && p.getName() == this.name && p.getAge() == * this.age && p.getSex() == this.sex) { */ //我们约定只有这四个属性都一样时,这两个对象才相等。 if (p.getId().equals(this.id) && p.getName().equals(this.name) && p.getAge().equals(this.age) && p.getSex().equals(this.sex)) { return true; } else { return false; } } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }