A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

接着上面的思路:
3 重写Person类中的hashCode方法
运行程序,观察结果。
发现仍然有重复的元素,这是为什么呢?
这是因为在判断元素的哈希值之后,
如果哈希值相同,会调用equals方法判断内容是否一样。
这就要求:
4 重写equals方法.
  1. import java.util.*;
  2. //1 把数据存入Person,建立Person类
  3. class Person
  4. {
  5.         private String name;//姓名
  6.         private int age;//年龄

  7.         Person(String name,int age)
  8.         {
  9.                 this.name = name;
  10.                 this.age = age;
  11.         }

  12.         public void setName(String name)
  13.         {
  14.                 this.name = name;
  15.         }

  16.         public String getName()
  17.         {
  18.                 return name;
  19.         }

  20.         public void setAge(int age)
  21.         {
  22.                 this.age =age;
  23.         }

  24.         public int getAge()
  25.         {
  26.                 return age;
  27.         }

  28.         //重写hashCode方法
  29.         public int hashCode()
  30.         {
  31.                 return name.hashCode()+age*37;
  32.         }

  33.         //重写equals方法
  34.         public boolean equals(Object obj)
  35.         {
  36.                 //强制转换Person类型
  37.                 Person p = (Person)obj;

  38.                 //判断是否为同一个人
  39.                 return this.getName().equals(p.getName()) && this.getAge()==p.getAge();
  40.         }
  41. }

  42. //主类
  43. class HashSetTest
  44. {
  45.         public static void main(String[] args)
  46.         {
  47.                 //1 创建HashSet集
  48.                 HashSet hs = new HashSet();

  49.                 //2 把Person对象存入集合
  50.                 hs.add(new Person("Jack",20));
  51.                 hs.add(new Person("Jack",20));
  52.                 hs.add(new Person("Tom",18));
  53.                 hs.add(new Person("Tom",18));
  54.                 hs.add(new Person("Mike",19));
  55.                 hs.add(new Person("Jane",26));

  56.                 //3 取出元素
  57.                 for(Iterator it = hs.iterator(); it.hasNext(); )
  58.                 {
  59.                         //强制转换为Person
  60.                         Person p = (Person)it.next();
  61.                         System.out.println(p.getName()+"---"+p.getAge());
  62.                 }
  63.         }
  64. }
复制代码

/*
运行结果:


Tom---18
Jane---26
Jack---20
Mike---19
说明已经成功去重了,HashSet中已经不存在同名同年龄的人了!

总结:在HashSet中,存入元素是先判断哈希值是否一样,再判断内容是否一样!
hashset为了保证元素唯一:
1 如果元素哈希值相同,就判断equals是否为true;
2 如果哈希值不相同,不会调用equals方法。
此外,contains()和remove()等操作,HashSet都是依赖hashCode()和equals方法。
所以在类中必须重写这两个方法,才能保证元素唯一!


1 个回复

正序浏览
来看一看啊,给点分啊版主!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马