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;//做了两次强转啊,Person p=(Person)it.next();不是强转了一回了吗???? System.out.println(this.name+"...."+p.name); 这里强转是因为Person类要覆盖Object类中的equals方法,你看这个方法的参数类型都是Object的 而你return 中要
比较的name 和age 都是子类中(就是Person)的成员属性啊 这也是多态的体现 必须向下转型 要不会出现类型转换异常的
return this.name.equals(p.name)&&this.age==p.age;//equals和pubLic boolean equals(Object obj)怎么不是一个啊
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
class ArrayListTest2
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add(new Person("wangwu01",30));
al.add(new Person("wangwu01",30));
al.add(new Person("wangwu03",33));
al.add(new Person("wangwu04",34));
al.add(new Person("wangwu04",34));
al =singleElement(al);
Iterator it=al.iterator();
while (it.hasNext())
{
Person p=(Person)it.next();// 这里强转是因为it.next() 是去除集合中存放对象的内存地址,相当于对象的引用 ,而这些引用是
sop(p.getName()+"%%%%"+p.getAge()); 怎么添加进去的? 是add(Object obj);添加进去的, 相当于
add(Object obj = newnew Person("wangwu01",30)); 这是多态,而你调用的是子类对象中的方法
) 多以必须向下转型了啊
}
}
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;
}
} |