小白在看毕向东老师的Java基础视频时遇到了问题,视频是第14天的,是关于集合中的HashSet的内容
需求如下:
给HashSet集合中存入自定义对象,姓名和年龄相同为同一个人,去除重复元素
问题是:为什么打印的结果还是出现了重复的元素,找不到原因?请各位路过的大神号脉!
打印结果:
zhangsan01...25
zhangsan03...21
zhangsan02...26
zhangsan02...26
以下是代码部分:
package com.itheima.day14;
import java.util.HashSet;
import java.util.Iterator;
class personHuman{
private String name;
private int age;
personHuman(String name,int age){
this.name = name;
this.age = age;
}
//覆盖personHuman类的hashCode()方法,建立其对象自己的哈希值
public int hashCode(){
//为了保证哈希值的唯一性所以乘以39
return name.hashCode()+age*39;
}
//重写Object中的equals()
public boolean equals(Object obj){
if(!(obj instanceof Person))
return false;
personHuman p = (personHuman)obj;
return this.name.equals(p.name) && this.age==p.age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
}
class HashSetTest {
//定义了一个打印方法
public static void sop(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
HashSet hs = new HashSet();
//存入以后就在哈希表里面产生4个不同哈希值,有了4个不同位置的存储,就不用再读equals()
hs.add(new personHuman("zhangsan01",25));
hs.add(new personHuman("zhangsan02",26));
hs.add(new personHuman("zhangsan03",21));
hs.add(new personHuman("zhangsan02",26));
//hs.add(new personHuman("zhangsan04",30));
Iterator it = hs.iterator();
while(it.hasNext()){
personHuman p = (personHuman)it.next();
sop(p.getName()+"..."+p.getAge());
}
}
}
|
|