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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cc3441251 中级黑马   /  2015-8-22 09:01  /  608 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    Hashset和数学中的集合的概念一样,不能往集合中放置相同的元素,而如何判断往集合中放置的元素是否相同,则是通过Object类的hashcode和equals方法来确定的,具体的判断过程为:当使用HashSet时候,hashcode方法就会调用,判断已经存储在HashSe中的对象的hashcode值是否和新添加的对象的hashcode值一样,如果不一致,则直接加进去,若一致,再对这个对象进行equals方法的比较,若equals方法返回的是true,则不将新对象添加进去,若是false则添加进去。(这是因为 hash code 相同的对象不一定equals方法返回ture ,简言之就是equal了hashcode一样,不equal了hashcode不一定不一样,有可能一样).注意:往hashset里面存的时候一定是先判断hash code 值。

  1. package cn.itcast.HashSet;
  2. import java.util.*;

  3. class Person
  4. {
  5.         private String name;
  6.         private int age;
  7.         public Person()
  8.         {
  9.         }
  10.        
  11.         public Person(String name,int age)//定义有参构造函数
  12.         {
  13.                 this.name=name;
  14.                 this.age=age;
  15.         }

  16.         public void setName(String name)//定义修改name的方法
  17.         {
  18.                 this.name=name;
  19.         }
  20.         public String getName()//定义获取name的方法
  21.         {
  22.                 return this.name;
  23.         }

  24.         public void setAge()// 定义修改年龄的方法
  25.         {
  26.                 this.age=age;
  27.         }
  28.         public int getAge()//定义获取年龄的方法
  29.         {
  30.                 return this.age;
  31.         }

  32.         public int hashCode()//重写hashCode()方法
  33.         {
  34.                 return name.hashCode()+age*39;
  35.         }
  36.        
  37.         public boolean equals(Object obj)//重写equals方法
  38.         {
  39.                 if(this==obj)
  40.                         return true;//同一个对象放两次,直接返回true
  41.                 if(!(obj instanceof Person))
  42.                         throw new ClassCastException("类型错误");

  43.                 Person p=(Person)obj;
  44.                 return this.name.equals(p.name)&&this.age==p.age;
  45.         }
  46.        
  47. }
  48. class  HashSetDemo
  49. {
  50.         public static void main(String[] args)
  51.         {
  52.                 HashSet<Person> hs=new HashSet<Person>();
  53.                 hs.add(new Person("java01",11));
  54.                 hs.add(new Person("java02",22));
  55.                 hs.add(new Person("java03",33));
  56.                 hs.add(new Person("java04",44));
  57.                 hs.add(new Person("java02",22));

  58.                 Iterator<Person> it=hs.iterator();//获取迭代器对象
  59.                 while(it.hasNext())
  60.                 {
  61.                          Person p=it.next();
  62.                          System.out.println(p.getName()+"::"+p.getAge());
  63.                 }
  64.         }
  65. }
复制代码



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马