根据毕老师讲的Hashset添加新元素时,做如下的操作
1:判断hashcode是否一样,如果不一样,存入;如果一样,转入步骤 2。
2:判断equals方法,如果为真,就是相同,不存入; 如果为假,就是不同,存入;
现在我重写hashCode()方法如下
- public int hashCode() {
- System.out.println("hashCode : >>"+this.name+"---"+this.age);
- return 60;
- }
复制代码 重写equals()方法如下,其实就是在原来equals方法里面加了一些打印语句,核心的判断语句 return (this == obj);没有改变
- public boolean equals(Object obj) {
- System.out.println("this:"+this);
- // System.out.println(">>>>>");
- System.out.println("obj:"+obj);
- System.out.println(this == obj);
- return (this == obj);
- }
复制代码
现在做如下的操作:
- HashSet hs=new HashSet();
- Person4 p1=new Person4("a",1);
- Person4 p2=new Person4("b",2);
- sop("====");
- hs.add(p1);
- sop("====");
- hs.add(p2);
- sop("------------------打印Hashset----------");
- for (Iterator iterator = hs.iterator(); iterator.hasNext();) {
- Person4 object = (Person4) iterator.next();
- sop(object.getAge()+"---"+object.getName());
- }
复制代码 输出结果为:
====
hashCode : >>a---1
====
hashCode : >>b---2
hashCode : >>b---2
this:day14Collection.Person4@3c
hashCode : >>a---1
obj:day14Collection.Person4@3c
false
------------------打印Hashset----------
2---b
1---a
现在我的问题是:
我重写hashCode()之后,Person4 的对象的hash值都是 60;
也就是步骤一转入了 步骤 2;
而在equal是方法中
this 和 obj 打印都是 day14Collection.Person4@3c
但为什么
System.out.println(this == obj); 结果是 false 呢?
求解答!!!
下面给出全部代码:
- package day14Collection;
- import java.util.HashSet;
- import java.util.Iterator;
- public class HashSetTest2 {
- public static void main(String[] args) {
- HashSet hs=new HashSet();
- Person4 p1=new Person4("a",1);
- Person4 p2=new Person4("b",2);
- sop("====");
- hs.add(p1);
- sop("====");
- hs.add(p2);
- sop("------------------打印Hashset----------");
- for (Iterator iterator = hs.iterator(); iterator.hasNext();) {
- Person4 object = (Person4) iterator.next();
- sop(object.getAge()+"---"+object.getName());
- }
- }
- static void sop(Object o){
- System.out.println(o);
- }
- }
- class Person4{
- private String name;
- private int age;
- public Person4(String name,int age) {
- this.name=name;
- this.age=age;
- }
- public String getName() {
- return name;
- }
- public int getAge() {
- return age;
- }
- // public boolean equals(Object object) {
- // System.out.println(this.name+"---->equals"+this.age);
- // if(!(object instanceof Person4)) {
- // return false;
- // }
- // Person4 p=(Person4) object;
- // return this.name.equals(p.getName())&&this.name==(p.getName());
- // }
- public boolean equals(Object obj) {
- System.out.println("this:"+this);
- // System.out.println(">>>>>");
- System.out.println("obj:"+obj);
- System.out.println(this == obj);
- return (this == obj);
- }
- public int hashCode() {
- System.out.println("hashCode : >>"+this.name+"---"+this.age);
- return 60;
- }
- }
复制代码
|
|