小弟今日做一ArrayList练习,往其中放入自定义Person类,此类有两个属性,本来是比较类地址值的默认规则,但是我重写了equals()方法,要达到“按姓名+年龄相同则看做同一人,不放入集合中”的效果。
    但是我反复检查了代码结果显示都是把所有元素都放进去了,没有达到我要的剔除同一人的效果。
    以下是代码,求各位前辈不吝指点:
import java.util.*;
//建立Person对象,并按姓名跟年龄删选不同人放入ArrayList集合中。
class Person
{
private String name;//每个Person都有名字跟年龄属性。
private int age;

Person(String name, int age)//建立Person对象构造函数。
{
this.name = name;
this.age = age;
}

public boolean equals(Object obj)//重写equals()方法。
{
if (!(obj instanceof Person))
{
return false;
}
Person p = (Person)obj;
return this.name.equals(p) && this.age == p.age;
} public void show()//每个Person对象能show()自己的名字跟年龄。
{
System.out.println(name+"......"+age);
}
}class ArrayListDemo
{
public static void main(String[] arguments) 
{
ArrayList<Person> al = new ArrayList<Person>();
al.add(new Person("lisi",20));
al.add(new Person("zhangsan",20));
al.add(new Person("wangwu",20));
al.add(new Person("wangwu",20));
al.add(new Person("zhaoliu",20));
al.add(new Person("zhangsan",20));

for (Person p : al)
{
p.show();
}
}
}

解决方案 »

  1.   

    如果想达到你的效果请使用HashSet,并重写hashcode方法
      

  2.   

    请问可以用ArrayList达到这想要的效果吗?
    因为这是老师布置的ArrayList练习。
      

  3.   

    我想问各位前辈的是:ArrayList底层不是默认调用equals()方法作为比较集合中元素的依据的吗?
    为什么我重写了equals()方法之后代码没有生效达到我要的效果呢?
    跪求前辈们指点。