我把你的代码稍微改了一下,修改的地方在equals方法中[code=java]
import java.util.*;
class Person {
private String name;
private int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object obj) {
if (!(obj instanceof Person))
return false;
Person p = (Person) obj;
boolean isEquals = this.name.equals(p.name) && this.age == p.age;
System.out.println(this.name + " : " + this.age + ".....equals....."
+ p.name + " : " + p.age + " " + isEquals);
return isEquals;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
class ArrayListTest2 {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add(new Person("lisi01", 30));
al.add(new Person("lisi02", 32));
al.add(new Person("lisi02", 32));
al.add(new Person("lisi03", 33));
al.add(new Person("lisi04", 35));
al.add(new Person("lisi04", 35));
al = singleElement(al);
Iterator it = al.iterator();
while (it.hasNext()) {
Person p = (Person) it.next();
sop(p.getName() + " " + p.getAge());
}
}
public static void sop(Object obj) {
System.out.println(obj);
}
public static ArrayList singleElement(ArrayList al) {
ArrayList newAl = new ArrayList();
Iterator it = al.iterator();
while (it.hasNext()) {
Object obj = it.next();
if (!newAl.contains(obj))
newAl.add(obj);
}
return newAl;
}
}[/code]以下是控制台输出的结果:
lisi02 : 32.....equals.....lisi01 : 30 false
lisi02 : 32.....equals.....lisi01 : 30 false
lisi02 : 32.....equals.....lisi02 : 32 true
lisi03 : 33.....equals.....lisi01 : 30 false
lisi03 : 33.....equals.....lisi02 : 32 false
lisi04 : 35.....equals.....lisi01 : 30 false
lisi04 : 35.....equals.....lisi02 : 32 false
lisi04 : 35.....equals.....lisi03 : 33 false
lisi04 : 35.....equals.....lisi01 : 30 false
lisi04 : 35.....equals.....lisi02 : 32 false
lisi04 : 35.....equals.....lisi03 : 33 false
lisi04 : 35.....equals.....lisi04 : 35 true
lisi01 30
lisi02 32
lisi03 33
lisi04 35
从结果结果可以分析出出,equals方法是在 contains方法调用后调用的,
刚开始的时候,集合中没有元素,所以就不用判断该要加的元素(即al.add(new Person("lisi01", 30));)是否和集合中的equals,
当第二个元素("lisi02", 32));要加入的时候,它先和集合中的已有元素(("lisi01", 30));)进行比较,由于你定义的equals方法中判断2个对象是否相等的条件是姓名和年龄都相等,这时2个对象才相等,
当第三个元素("lisi02", 32));要加入时,就要和前面2个元素进行比较,由于姓名和年龄都和第二个元素相等,所以比较的结果是true,因此无法加入
后面的元素以此类推
所以最后只有4个元素加到了集合中
[ 本帖最后由 黄敏文 于 2011-08-31 08:27 编辑 ] |