tr- /*
- 需求:去除ArrayList集合中的重复对象。
- */
- import java.util.*;
- class Person
- {
- private String name;
- private int age;
- Person(String name,int age){
- this.name = name;
- this.age = age;
- }
- public String getName(){
- return name;
- }
- public int getAge(){
- return age;
- }
- public boolean equals(Object obj){ //复写Object类中的比较方法
- if(!(obj instanceof Person))
- throw new RuntimeException("类型异常,非Person类");//throw抛出异常对象,是对象 而不是类名!!
- Person p = (Person)obj;
- System.out.println("调用Person对象的equals方法,与已存在的对象对比:"+p.getName()+":::"+p.getAge());
- return p.getName().equals(this.name) && p.getAge() == this.age;
- }
- }
- class ArrayListTest1
- {
- public static void main(String[] args)
- {
- ArrayList al = new ArrayList();
- al.add(new Person("lili",21));
- al.add(new Person("sasa",22));
- al.add(new Person("lili",21));
- al.add(new Person("lucy",18));
-
- System.out.println("去重前:");
- sop(al);
- try
- {
- al = singleCollection(al);
- System.out.println("去重后:");
- sop(al);
- }
- catch (RuntimeException e)
- {
- System.out.println(e.toString());
- System.out.println(e.getMessage());
- }
-
-
- }
- public static ArrayList singleCollection(ArrayList al){
- ArrayList newal = new ArrayList();
- int i = 1;
- for(Iterator it = al.iterator();it.hasNext();i++){
- Object obj = it.next();//迭代器返回的是Object对象
- if(!(newal.contains(obj))){
- newal.add(obj);
- System.out.println("新数组已添加第"+i+"个对象");
- }
- }
- return newal;
- }
- public static void sop(ArrayList al){
- Iterator it = al.iterator();
- while(it.hasNext()){
- Person p = (Person)it.next();//迭代器返回是Object对象,需向下转型
- System.out.println(p.getName()+":::"+p.getAge());
- }
- }
- }
- /*
- 运行结果:
- 去重前:
- lili:::21
- sasa:::22
- lili:::21
- lucy:::18
- 新数组已添加第1个对象
- 调用Person对象的equals方法,与已存在的对象对比:lili:::21
- 新数组已添加第2个对象
- 调用Person对象的equals方法,与已存在的对象对比:lili:::21
- 调用Person对象的equals方法,与已存在的对象对比:lili:::21
- 调用Person对象的equals方法,与已存在的对象对比:sasa:::22
- 新数组已添加第4个对象
- 去重后:
- lili:::21
- sasa:::22
- lucy:::18
- 由运行结果可知,集合的contains方法其实调用了对象的equals方法,来比较元素是否一样,
- 作为判断包含与否的依据。
- */
复制代码
|
|