黑马程序员技术交流社区
标题:
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