A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fmi110 高级黑马   /  2015-7-28 11:30  /  347 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

tr
  1. /*
  2. 需求:去除ArrayList集合中的重复对象。
  3. */
  4. import java.util.*;
  5. class Person
  6. {
  7.         private String name;
  8.         private int age;

  9.         Person(String name,int age){
  10.                 this.name = name;
  11.                 this.age = age;
  12.         }
  13.         public String getName(){
  14.                 return name;
  15.         }
  16.         public int getAge(){
  17.                 return age;
  18.         }
  19.         public boolean equals(Object obj){  //复写Object类中的比较方法
  20.                 if(!(obj instanceof Person))
  21.                         throw new RuntimeException("类型异常,非Person类");//throw抛出异常对象,是对象 而不是类名!!
  22.                 Person p = (Person)obj;
  23.                 System.out.println("调用Person对象的equals方法,与已存在的对象对比:"+p.getName()+":::"+p.getAge());
  24.                 return p.getName().equals(this.name) && p.getAge() == this.age;
  25.         }
  26. }
  27. class ArrayListTest1
  28. {
  29.         public static void main(String[] args)
  30.         {
  31.                 ArrayList al = new ArrayList();
  32.                 al.add(new Person("lili",21));
  33.                 al.add(new Person("sasa",22));
  34.                 al.add(new Person("lili",21));
  35.                 al.add(new Person("lucy",18));

  36.                
  37.                 System.out.println("去重前:");
  38.                 sop(al);

  39.                 try
  40.                 {
  41.                         al = singleCollection(al);
  42.                         System.out.println("去重后:");
  43.                         sop(al);
  44.                 }
  45.                 catch (RuntimeException e)
  46.                 {
  47.                         System.out.println(e.toString());
  48.                         System.out.println(e.getMessage());
  49.                 }
  50.                
  51.                
  52.         }
  53.         public static ArrayList singleCollection(ArrayList al){
  54.                 ArrayList newal = new ArrayList();
  55.                 int i = 1;
  56.                 for(Iterator it = al.iterator();it.hasNext();i++){
  57.                         Object obj = it.next();//迭代器返回的是Object对象
  58.                         if(!(newal.contains(obj))){
  59.                                 newal.add(obj);
  60.                                 System.out.println("新数组已添加第"+i+"个对象");       
  61.                         }
  62.                 }
  63.                 return newal;
  64.         }
  65.         public static void sop(ArrayList al){
  66.                 Iterator it = al.iterator();
  67.                 while(it.hasNext()){
  68.                         Person p = (Person)it.next();//迭代器返回是Object对象,需向下转型
  69.                         System.out.println(p.getName()+":::"+p.getAge());
  70.                 }
  71.         }
  72. }
  73. /*
  74. 运行结果:  
  75.                         去重前:
  76.                         lili:::21
  77.                         sasa:::22
  78.                         lili:::21
  79.                         lucy:::18
  80.                         新数组已添加第1个对象
  81.                         调用Person对象的equals方法,与已存在的对象对比:lili:::21
  82.                         新数组已添加第2个对象
  83.                         调用Person对象的equals方法,与已存在的对象对比:lili:::21
  84.                         调用Person对象的equals方法,与已存在的对象对比:lili:::21
  85.                         调用Person对象的equals方法,与已存在的对象对比:sasa:::22
  86.                         新数组已添加第4个对象
  87.                         去重后:
  88.                         lili:::21
  89.                         sasa:::22
  90.                         lucy:::18
  91. 由运行结果可知,集合的contains方法其实调用了对象的equals方法,来比较元素是否一样,
  92. 作为判断包含与否的依据。
  93. */
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马