黑马程序员技术交流社区

标题: 集合去重 [打印本页]

作者: xiaoqiang01    时间: 2015-7-11 22:35
标题: 集合去重
/**
遍历人员档案,去除重复人员(同姓名同年龄)
*/

  1. import java.util.*;
  2. class Person
  3. //定义人员类
  4. {
  5.         private String name;
  6.         private int age;
  7.         Person(String name,int age)
  8.         {
  9.                 this.name=name;
  10.                 this.age=age;
  11.         }
  12.         public boolean equals(Object obj)
  13.         /*
  14.         重写equals方法,比较两个人对象的姓名和年龄判断是否同一人
  15.         注意:
  16.         在List集合中,contains和remove方法的低层都是equals方法
  17.         所以,重写了equals方法后,contains和remove方法也会改变
  18.         例如此时,contains方法就是查询集合中是否有指定对象同姓名年龄的对象
  19.         */
  20.         {
  21.                 if (!(obj instanceof Person) )
  22.                 {
  23.                         return false;
  24.                 }
  25.                 //instanceof是判断obj是否是Person的实例
  26.                 //换句话说,判断obj是否可以转型为Person
  27.                 Person p=(Person) obj;
  28.                 return this.name.equals(p.name)&&this.age==p.age;
  29.         }
  30.         public void sopPerson()
  31.         {
  32.                 Person.sop("name:"+name+" ,age:"+age);
  33.         }
  34.         public static void sop(Object obj)
  35.         {
  36.                 System.out.println(obj);
  37.         }
  38. }
  39. class Out
  40. {
  41.         private ArrayList per;
  42.         ArrayList per_n=new ArrayList();
  43.         Out()
  44.                 //构造函数录入原名单
  45.         {
  46.                 per=new ArrayList();
  47.                 per.add(new Person("jia",18));
  48.                 per.add(new Person("yi",18));
  49.                 per.add(new Person("jia",23));
  50.                 per.add(new Person("jia",18));
  51.                 per.add(new Person("bin",18));
  52.                 per.add(new Person("yi",18));
  53.                 per.add(new Person("bin",18));
  54.                 per.add(new Person("jia",20));
  55.                 show(per);
  56.         }
  57.         public void outPerson()
  58.                 //去除相同人员的方法
  59.         {
  60.                 Iterator it=per.iterator();
  61.                 //跌送提取集合对象
  62.                 while (it.hasNext())
  63.                 {
  64.                         Person p=(Person) it.next();
  65.                         //next返回的是Object对象
  66.                         //要使用Person中方法,需要向下转型
  67.                         if (!per_n.contains(p))
  68.                         //equals方法已经重写,contains也有了新的功能
  69.                         {
  70.                                 per_n.add(p);
  71.                         }
  72.                 }
  73.                 Person.sop("-------------------------------");
  74.                 show(per_n);
  75.         }
  76.         public void show(ArrayList per)
  77.                 //遍历集合对象方法
  78.         {
  79.                 Iterator it=per.iterator();
  80.                 while (it.hasNext())
  81.                 {
  82.                         Person p=(Person)it.next();
  83.                         p.sopPerson();
  84.                 }
  85.         }

  86. }
  87. class  ArrayListDemo
  88. {
  89.         public static void main(String[] args)
  90.         {
  91.                 new Out().outPerson();
  92.         }
  93. }
复制代码




作者: 房东告诉对方    时间: 2015-7-16 07:56
学习了学习了
作者: fantianfei    时间: 2015-7-16 08:39
集合里的啊。
作者: huangjiawei    时间: 2015-7-16 09:35
可以的。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2