本帖最后由 刘凯 于 2013-2-6 16:18 编辑
- /*
- 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
- 比如:存人对象。id相同,视为同一个人。为重复元素。
- 思路:
- 1,对人描述,将数据封装进人对象。
- 2,定义容器,将人存入。
- 3,取出。
- */
- import java.util.*;
- class person
- {
- private String name;
- private int age;
- private String id;
- person(String name,int age,String id)
- {
- this.name = name;
- this.age = age;
- this.id = id;
- }
- public String getName()
- {
- return name;
- }
- public int getAge()
- {
- return age;
- }
- public String getId()
- {
- return id;
- }
- public boolean equals(Object obj)
- {
- if(!(obj instanceof person))
- return false;
- person p =(person)obj;
- return this.id.equals(p.id); //id 是person类中的私有变量,而p对象是调用当前对象equals方法传入的一个对象,
- //return this.id.equals(p.getId()); //而并非p对象的equals方法,为何仍然可以用p.id的方式调用p对象中的id??
- // 第1种. return this.id.equals(p.id); 第2种. return this.id.equals(p.getId());
- //我认为第二种符合逻辑,第一种也能够实现,求原因???
- }
- }
- class ArrayListTest
- {
- public static void main(String[] args)
- {
- ArrayList al1 = new ArrayList();
- al1.add(new person("小明",20,"1234567890"));
- al1.add(new person("小强",22,"1234567890"));
- al1.add(new person("小红",20,"1234567892"));
- al1.add(new person("小明",20,"1234567891"));
- al1 = singleElement(al1);
- for(Iterator it = al1.iterator();it.hasNext();)
- {
- person p = (person)it.next();
- System.out.println("姓名:"+p.getName()+"\t年龄:"+p.getAge()+"\t身份证号:"+p.getId());
- }
- }
- public static ArrayList singleElement(ArrayList al1)
- {
- ArrayList al2 = new ArrayList();
- Iterator it = al1.iterator();
- while(it.hasNext())
- {
- Object obj = it.next();
- if(!(al2.contains(obj)))
- al2.add(obj);
- }
- return al2;
- }
- }
复制代码 如中间注释部分
return this.id.equals(p.id); //id 是person类中的私有变量,而p对象是调用当前对象equals方法传入的一个对象,
//return this.id.equals(p.getId()); //而并非p对象的equals方法,为何仍然可以用p.id的方式调用p对象中的id??
// 第1种. return this.id.equals(p.id); 第2种. return this.id.equals(p.getId());
//我认为第二种符合逻辑,第一种也能够实现,求原因???
|