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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔政 中级黑马   /  2012-10-18 11:56  /  1209 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在毕老师第14天的视频中,老师举了这么两个例子。名字分别是ArrayListTest2 和HashSetTest,不知道还有没有印象。
姓名和年龄相同为同一个人,重复元素。
首先是ArrayListTest2
  1. /*
  2. 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
  3. 比如:存人对象,同姓名,同年龄视为同一个人,为重复元素
  4. */
  5. import java.util.*;
  6. class ArrayListTest2{
  7.         public static void main(String[] args){
  8.                 Person p1=new Person("mike",18);
  9.                 Person p2=new Person("mike",18);
  10.                 Person p3=new Person("LiLiSi",19);
  11.                 Person p4=new Person("LiLiSi",19);
  12.                 Person p5=new Person("Jason",18);
  13.                 Person p6=new Person("Tom",20);
  14.                 ArrayList al=new ArrayList();
  15.                 al.add(p1);
  16.                 al.add(p2);
  17.                 al.add(p3);
  18.                 al.add(p4);
  19.                 al.add(p5);
  20.                 al.add(p6);
  21.                 al=Chong(al);
  22.                 for(int i=0;i<al.size();i++){
  23.                         Person p_temp=(Person)al.get(i);
  24.                         sop(p_temp.getName()+"..."+p_temp.getAge());
  25.                 }
  26.                
  27.                
  28.         }
  29.         public static void sop(Object obj){
  30.                 System.out.println(obj);
  31.         }
  32.         public static ArrayList Chong(ArrayList al){
  33.                 ArrayList al2=new ArrayList();
  34.                 for(int i=0;i<al.size();i++){
  35.                         Person p1=(Person)al.get(i);
  36.                         if(al2.isEmpty())
  37.                                 al2.add(p1);
  38.                         else{
  39.                                 boolean flag=false;
  40.                                 for(int j=0;j<al2.size();j++){
  41.                                         Person p2=(Person)al2.get(j);       
  42.                                         if(p2.equals(p1))
  43.                                                 flag=true;
  44.                                 }
  45.                                 if(!flag){
  46.                                         al2.add(al.get(i));
  47.                                 }
  48.                         }
  49.                 }
  50.                 return al2;
  51.         }
  52. }
  53. class Person{
  54.         private int age;
  55.         private String name;
  56.         Person(){}
  57.         Person(String name,int age){
  58.                 this.name=name;
  59.                 this.age=age;
  60.         }
  61.         public String getName(){
  62.                 return this.name;
  63.         }
  64.         public int getAge(){
  65.                 return this.age;
  66.         }
  67.         public boolean equals(Person per){
  68.                
  69.                 if(this.name.equals(per.name) && this.age==per.age)
  70.                         return true;
  71.                 else
  72.                         return false;
  73.         }
  74. }
复制代码
接下来是HashSetTest
  1. class HashSetTest{
  2.         public static void main(String[] args){
  3.                 HashSet hs=new HashSet();
  4.                 hs.add(new Person("a1",11));
  5.                 hs.add(new Person("a1",11));
  6.                 hs.add(new Person("a2",12));
  7.                 hs.add(new Person("a3",13));
  8.                 hs.add(new Person("a4",14));

  9.                 Iterator iter=hs.iterator();
  10.                 while(iter.hasNext()){
  11.                         Person p=(Person)iter.next();
  12.                         sop(p.getName()+"..."+p.getAge());
  13.                 }
  14.         }

  15.         public static void sop(Object obj){
  16.                 System.out.println(obj);
  17.         }
  18. }
  19. class Person{
  20.         private int age;
  21.         private String name;
  22.         Person(){}
  23.         Person(String name,int age){
  24.                 this.name=name;
  25.                 this.age=age;
  26.         }
  27.         public String getName(){
  28.                 return this.name;
  29.         }
  30.         public int getAge(){
  31.                 return this.age;
  32.         }
  33.         public boolean equals(Object obj){
  34.                 Person p=(Person)obj;
  35.                 if(this.name.equals(p.name) && this.age==p.age)
  36.                         return true;
  37.                 else
  38.                         return false;
  39.         }
  40.         public int hashCode(){
  41.                 return name.hashCode()+age;//因为地址都相同,所以直接比较对象,而对象的方法也被重写
  42.         }
  43. }
复制代码
在HashSetTest中,复写了equals方法,参数也是Obejct。如果换成了Person,就不是重写,就是重载了,所以无法取出同名同龄的Person。
而在ArrayListTest2中,我没有复写equals,而是重载了,但是却行的通,可以调用,这是为什么呢?

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

0 个回复

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