List接口继承了Collection接口的contains方法,该方法方便用来判断某个对象是否在List接口的实现类对象中,省去了我们自己写循环遍历来判断是某个集合对象中是否包含某个对象。
但是其实contains的内部实现机制也是如此,如果要判断某个对象在集合对象中是否存在,是拿该对象与集合对象中每个对象进行比较,在比较的时候也是调用本对象类型的equals方法,所以我们可以通过重写本对象类型中的equals方法来制定我们需要的比较规则。
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.collection12.Stu; public class TestCollections2 { private List<Stu> stuList = new ArrayList<Stu>(); public static void main(String[] args) { TestCollections2 tc2 = new TestCollections2(); tc2.addStudent(); tc2.testContains(); tc2.testContainsAll(); } public void testContains() { Stu s = stuList.get(0); System.out.println("学生集合中是否包含" + s.getName() + ":" + stuList.contains(s));//结果:学生集合中是否包含tom:true Stu s2 = new Stu("1", "tom"); System.out.println("学生集合中是否包含" + s2.getName() + ":" + stuList.contains(s2));//结果:学生集合中是否包含tom:true } public void testContainsAll() { Stu s1 = new Stu("11", "tom"); Stu s2 = new Stu("22","alex"); System.out.println("学生中是否包含" + s1.getName() + "、" + s2.getName() + ":" + stuList.containsAll(Arrays.asList(s1,s2))); //以上结果:学生中是否包含tom、alex:true } public void addStudent() { Stu s1 = new Stu("1", "tom"); stuList.add(s1); Stu s2 = new Stu("2","alex"); stuList.add(s2); Stu s3 = new Stu("3","jack"); stuList.add(s3); } }
public class Stu { private String id; private String name; public Stu(String id,String name) { this.id = id; this.name = name; } /** * @return id */ public String getId() { return id; } /** * @param id 要设置的 id */ public void setId(String id) { this.id = id; } /** * @return name */ public String getName() { return name; } /** * @param name 要设置的 name */ public void setName(String name) { this.name = name; } @Override//重写了equals方法,在本方法中以name属性是否相同来判断两个Stu对象是否相等 public boolean equals(Object obj) { if(this == obj) return true; if(obj == null) return false; if(getClass() != obj.getClass()) {//判断是否是同一个类型方法一 return false; } if(!(obj instanceof Stu)) {//判断是否是同一个类型方法二 return false; } Stu s = (Stu)obj; /*if(id == null) { if(s.id != null ) { return false; } } else if(!id.equals(s.id)) { return false; }*/ if(name == null) { if(s.name != null) { return false; } } else if(!name.equals(s.name)) { return false; } return true; } }