import java.util.*;
class ArrayListTest2
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
//add(Object obj) ~~ Object obj = new Person("al 01",21);
al.add( new Person("al 01",21) );
al.add( new Person("al 02",22) );
al.add( new Person("al 01",21) );
al.add( new Person("al 03",23) );
al.add( new Person("al 01",21) );
al.add( new Person("al 04",24) );
al.add( new Person("al 05",25) );
al.add( new Person("al 03",23) );
for (Iterator it = al.iterator(); it.hasNext(); )
{
//需进行对象的上转型,否则在编译时编译器在ArrayList的父类Object中找不到get方法
Person ps = (Person)it.next();
System.out.println("消除前:" + ps.getName() + "***" + ps.getAge() );
}
al = SingleElement.single(al);
for (Iterator it = al.iterator(); it.hasNext(); )
{
//需进行对象的上转型,否则在编译时编译器在ArrayList的父类Object中找不到get方法
Person ps = (Person)it.next();
System.out.println("消除后:" + ps.getName() + "***" + ps.getAge() );
}
}
}
class SingleElement
{
private static ArrayList newAl = new ArrayList();
public static final ArrayList single(ArrayList al)
{
Object obj ;
for (Iterator it = al.iterator() ; it.hasNext() ; )
{
obj = it.next();
if ( !newAl.contains(obj) )
newAl.add(obj);
}
return newAl;
}
}
class Person
{
private String name;
private int age;
Person(String name,int age)
{
setName(name);
setAge(age);
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
public boolean equals(Object obj)
{
if ( !(obj instanceof Person) )
return false;
Person ps = (Person)obj;
//System.out.println( this.getName() + "..." + ps.getName() );
/*
????????
this代表al中的一个元素,即Person对象,但在初始化时 Object obj = new Person()
那么this在这里为什么不用先转型为Person,才能使用get方法呢?
是因为this直接代表new Person()吗?所以this.getName()等同于new Person().getName();?
*/
return this.getName().equals( ps.getName() ) && this.getAge() == ps.getAge();
}
}
问题如下:
equals方法中 this代表al中的一个元素,
即 :obj = it.next();
if ( !newAl.contains(obj) ) 中的obj
也就是Person对象,但在初始化时 Object obj = new Person(), 那么this在这里为什么不需要像 main方法中的for循环中的it.next()一样 先转型为Person,才能使用get方法呢?
是因为this直接代表new Person()吗?所以this.getName()等同于new Person().getName();?
多谢啦!!!