Collection的contains()
public static void main(String[] args) {
Collection c=new ArrayList();
String s2=new String("def");
c.add(s2);
String s1=new String("abc");
c.add(s1);
System.out.println(c.size());
String x=new String("abc");
System.out.println(c.contains(x));//底层调用了equals方法
}
String类的equals方法是重写的,比较的是内容。因此,放在集合中的类型(特别自定义时)一定要重写equals方法。
由于contains方法底层调用了equals方法,所以比较的是元素内容而不是地址,因此结果为ture
Collection的remove(Object e)
public static void main(String[] args) {
Collection c=new ArrayList();
String s1=new String("hi");
c.add(s1);
String s2=new String("hi");
c.add(s2);
c.remove(s2);
System.out.println(c.size());
}
结果为:0
原因:remove也调用了equals方法,所以删除的是一样的内容,Java认为s1和s2是一样的。
注意:自定义类的时候记得重写equals方法!!!