package andycpp;
public class Person {
private String name;
private Integer age;
//get,set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
//构造器
public Person(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
//toString方法
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
//重写equals方法
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age == null) {
if (other.age != null)
return false;
} else if (!age.equals(other.age))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
重写Person类里面的equals方法之后,再运行
package andycpp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import org.junit.Test;
public class TestCollection {
@Test
public void testCollection2(){
Collection coll = new ArrayList();
//存入现成的,也可以存入自定义的
coll.add(123);
coll.add("AA");
coll.add(new Date());
coll.add("BB");
coll.add(new Person("MM",23));
System.out.println(coll);
//6,contains(Object obj);判断集合中是否包含指定的obj元素,如果包含返回true,反之,返回false
//判断的依据:根据元素所在类的equals方法进行判断,如果Person类没有重写equals方法,则按照Object类,比较的是地址值,如果重写了equals方法,则按照指定的来比较。
//明确;如果存入集合中的元素是自定义类的对象,要求:自定义类要重写equals()方法,
boolean b1 = coll.contains(123);
System.out.println(b1);
boolean b2 =coll.contains(new Person("MM",23));
System.out.println(b2);
}
输出
[123, AA, Thu Mar 16 11:56:20 CST 2017, BB, Person [name=MM, age=23]]
true
true
返回true
总结:我们判断,包括set说是不可重复的元素集合,怎么定义不可重复,再放入元素的时候,发现已经有了这个元素,如何对应有没有,也是用equals
从Collection 集合开始,存入集合里面的元素,一般都要求要重写equals方法,
而String里面重写了equals方法,所以返回true。