黑马程序员技术交流社区

标题: 希望帮我解决一下this与p分别是哪一个对象,有点分不清 [打印本页]

作者: 陈中岩    时间: 2013-4-10 01:50
标题: 希望帮我解决一下this与p分别是哪一个对象,有点分不清
本帖最后由 陈中岩 于 2013-4-10 19:53 编辑
  1. package test2;

  2. import java.util.ArrayList;
  3. import java.util.Iterator;

  4. /*将自定义对象作为元素存储到ArrayList集合中,并取出重复元素。
  5. *比如:存人对象。同姓名,同年龄,视为同一个人.为重复元素
  6. *
  7. *思路:
  8. *1,对人描述,将数据封装进人对象。
  9. *2,定义容器,将人存入
  10. *3,取出
  11. */
  12. class Person
  13. {
  14.         private String name;
  15.         private int age;
  16.         Person(String name,int age)
  17.         {
  18.                 this.name = name;
  19.                 this.age = age;
  20.         }
  21.         //判断姓名,年龄是否相同(equals在底层自动被调用的)
  22.         public boolean equals(Object obj)
  23.         {
  24.                 if(!(obj instanceof Person))
  25.                         return false;
  26.                 //!!!!!!!!!!!!------问题在这里,this调用与p调用的name分别是哪一个name,有点蒙了
  27.                 Person p = (Person)obj;
  28.                 System.out.println(this.name+""+p.name);
  29.                
  30.                 return this.name.equals(p.name) && this.age == p.age;
  31.                
  32.         }
  33.         
  34.         public String getName() {
  35.                 return name;
  36.         }

  37.         public int getAge() {
  38.                 return age;
  39.         }

  40. }

  41. class ArrayListTest2 {
  42.         public static void main(String[] args)
  43.         {
  44.                 ArrayList al = new ArrayList();
  45.                 al.add(new Person("list01",30));//因为这里al.add(Object obj)所以下面要做强制类型转换
  46.                 al.add(new Person("list02",32));
  47.                 al.add(new Person("list02",32));
  48.                 al.add(new Person("list03",33));
  49.                 al.add(new Person("list04",35));
  50.                 al.add(new Person("list04",35));
  51.                
  52.                 //去除相同元素
  53.                 al = singleElement(al);
  54.                
  55.                 Iterator it = al.iterator();
  56.                 while(it.hasNext())
  57.                 {
  58.                         //Object obj = it.next();
  59.                         //Person p = (Person)obj;
  60.                         //以上两句可以这么写
  61.                         Person p = (Person)it.next();//这里要做强制类型转换
  62.                         sop(p.getName()+"....."+p.getAge());
  63.                 }        
  64.         }
  65.         
  66.         //取出元素方法
  67.                 public static ArrayList singleElement(ArrayList al)
  68.                 {
  69.                         //创建一个容器
  70.                         ArrayList newAl = new ArrayList();
  71.                         //创建一个容器,取出集合中元素
  72.                         Iterator it = al.iterator();
  73.                         
  74.                         while(it.hasNext())
  75.                         {
  76.                                 //创建第三方对象,将迭代器出来的元素赋值给obj
  77.                                 Object obj = it.next();
  78.                                 //进行判断,如果newAl容器中不包含obj对象,就将obj对象存储斤newAl容器中
  79.                                 if(!newAl.contains(obj))
  80.                                         newAl.add(obj);
  81.                         }
  82.                         //最后将剩下的newAl进行返回
  83.                         return newAl;
  84.                 }
  85.                
  86.         public static void sop(Object obj)
  87.         {
  88.                 System.out.println(obj);
  89.         }
  90. }
复制代码

作者: 续圆凯    时间: 2013-4-10 02:36
this是调用equals方法的name;

p是传入的参数经过强制类型转换的name。
作者: 陈中岩    时间: 2013-4-10 02:56
  1. //左面是参数的,右面是当前对象
  2.                 System.out.println(this.name+""+p.name);
  3.                
  4.                 return this.name.equals(p.name) && this.age == p.age;
  5.                
复制代码
{:soso_e140:}问题解决了,当看到14-13的时候解决的。。呼呼~~~
作者: 黄玉昆    时间: 2013-4-10 08:14
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




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