黑马程序员技术交流社区

标题: 关于ArrayList练习的问题 [打印本页]

作者: 我为你着迷    时间: 2014-11-16 19:46
标题: 关于ArrayList练习的问题
  1. import java.util.*;
  2. class Person
  3. {
  4.         private String name;
  5.         private int age;
  6.         Person(String name,int age)
  7.         {
  8.                 this.name=name;
  9.                 this.age=age;
  10.         }
  11.        
  12.         public boolean equals(Object obj)
  13.         {
  14.                 if(!(obj instanceof Person))
  15.                                 return false;
  16.                 Person p=(Person)obj;
  17.                
  18.                 return this.name.equals(p.name)&&this.age==p.age;
  19.         }
  20.        
  21.         public String getName()
  22.         {
  23.                 return name;       
  24.         }
  25.         public int getAge()
  26.         {
  27.                 return age;
  28.         }
  29. }

  30. class ArrayListTest2
  31. {
  32.         public static void sop(Object obj)
  33.         {
  34.                 System.out.println(obj);       
  35.         }
  36.        
  37.         public static void main(String[] args)
  38.         {
  39.                  ArrayList al=new ArrayList();
  40.                
  41.                  al.add(new Person("lisi01",30));//al.add(Object obj); Object obj=new Person("lisi01",30);Person会被提升为Object类型。
  42.                  al.add(new Person("lisi02",32));
  43.                  al.add(new Person("lisi02",32));
  44.                  al.add(new Person("lisi03",33));
  45.                  al.add(new Person("lisi04",35));
  46.                  al.add(new Person("lisi04",35));
  47.                
  48.                  al=singleElement(al);
  49.                  
  50.                  Iterator it=al.iterator();
  51.                  
  52.                  while(it.hasNext())
  53.                  {
  54.                                   /*
  55.                                   Object obj=it.next();
  56.                                   Person p=(Person)obj;
  57.                                   */
  58.                                  
  59.                                   Person p=(Person)it.next();
  60.                                   sop(p.getName()+":::"+p.getAge());
  61.                  }
  62.         }
  63.    
  64.    
  65.    public  static ArrayList singleElement(ArrayList al)
  66.         {
  67.                         //定义一个临时容器
  68.                         ArrayList newAl=new ArrayList();
  69.                        
  70.                         Iterator it= al.iterator();//遍历老集合
  71.                        
  72.                         while(it.hasNext())
  73.                         {
  74.                                 Object obj=it.next();//获取一个元素用obj记下来
  75.                                
  76.                                 if(!newAl.contains(obj))
  77.                                         newAl.add(obj);
  78.                   }
  79.                   return newAl;
  80.         }
  81. }
复制代码

return this.name.equals(p.name)&&this.age==p.age;    大家好  这句话哪位大神帮小弟解答下啊 没整懂 this和p分别指的是什么啊
作者: 郑飞    时间: 2014-11-16 20:04
equals 是把当前对象和传入方法的obj对象做比较 而p是从obj强转过来的
所以拿当前对象的引用this和p来作比较
作者: wf111sxwf    时间: 2014-11-16 20:53
自古2楼出真理
作者: 我是紫色紫色    时间: 2014-11-17 13:09
this代表当前对象的引用,谁调用这个方法this就代表的是谁,p是你传递进来的那个参数,也就是另外一个对象,比如说有两个人person1和person2比较,this就代表person1,p就代表person2,懂了没?
作者: a8851625    时间: 2014-11-17 14:16
this表示当前谁调用它,this就是谁。然后这里面的p是表示调用者的this.xx和你准备拿来equals比较的对象的属性如p.xx。p其实算是指即将比较的Person对象。

举个例子,你要比较某个东西是不是人,你是不是得现有个参考?那么this代表的就是这个参考,p代表的就是你要拿来比较的哪个东西~这么讲不晓得清楚不
作者: 327753899    时间: 2014-11-17 14:44
当前对象和存入对象比较




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