黑马程序员技术交流社区

标题: hashSet [打印本页]

作者: 飘雪恩情    时间: 2014-2-21 19:56
标题: hashSet
class person
{
  private String name ;
  private int  age;
  person(String name,int age)
{
    this.name=name;
    this.age=age;
   
  }
  public int hashCode()
{
  System.out.println(this.name+"...hashCode");
  return name.hashCode()+age;
  }
  public boolean equals(objec  obj)
  {
   if(!(obj instanceOf person))
      return false;
    person  p=(person)obj;
    return this.name.equals(p.name)&&this.age=p.age;
   }
  public String getName()
{
  return name;

}
  public int getAge()
   {
     return age;
    }
}
上面程序中的 return this.name.equals(p.name)&&this.age=p.age; 中的 this.name 与p.name怎么区分啊?我分不清。

作者: 戚兴海    时间: 2014-2-21 20:10
这么说吧,假如你现在要比较2个Person对象,
Person A = new Person("张三",25);
Person B = new Person("李四",26);
调用equals方法来比较:A.equals(B);
代码中的this.name指的就是对象A里的name,p.name就是对象B里的name。
而且上面的代码equals方法中最后应该是 return this.name.equals(p.name)&&this.age==p.age才对的吧
作者: 一年_Hei    时间: 2014-2-21 20:15
你这是this关键字还没了解透。this表示当前调用equals方法的那个对象。p表示传入equals方法的对象。
作者: Amorvos    时间: 2014-2-21 21:38
return this.name.equals(p.name)&&this.age=p.age; 中的 this.name 与p.name这句你不明白吗?
比如S1.equal(S2)中return中的this是S1,P是S2
作者: xiaochen33520    时间: 2014-2-21 23:21
this就是当前对象,HashSet在存储数据时会判断已经存储的数据中是否有这些数据,他会先调用hashCode()方法来判断已经存储的数据中是否有即将存储的数据,如果hashCode()方法返回的哈希值在HashSet中的数据的哈希值都不相同那么就会直接把这个数据存储进去,如果相同就会调用equals()方法在判断这个数据的内容,而equals()方法中的this就代表已经存储在hashCode()中的数据,而你所说的P则是要往HashSet中存储的数据。不知道你懂了没?
如果要用到HashSet存储对象那么就需要在对象的类中覆写hashCode()和equals()方法。




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