HashSet除了在元素的存储上是无序的以外,还是不能够存储重复的元素。

HashSet如何判断元素是否重复呢?是根据元素继承的两个方法来判断,hashCode和equals,当存储元素时,首先判断要存入的元素和已存在的元素的哈希值是否相同,若不相同存入,若相同则利用equals判断两个元素是否相同,若不相同,则存入,若相同则放弃。而hashCode和equlas是在存入元素自动调用的。

一下继续利用Person类举例

import java.util.*;

class Person

{

    private String name; //姓名

    private int age;    //年龄

    public Person(String name, int age)

    {

        this.name = name;

        this.age = age;

    }

    //用于生成自定义的哈希值

    public int hashCode()

    {

        return this.name.hashCode()+this.age*36;

    }

    //自己定义比较规则,与ArrayList相同

    public boolean equals(Object obj)

    {

        if(!(obj instanceof Person))

            return false;

        Person p = (Person)obj;

        return p.getName().equals(this.getName()) && (p.getAge() == this.getAge());

    }

    public String getName()

    {

        return this.name;

    }

    public int getAge()

    {

        return this.age;

    }

    public void setName(String name)

    {

        this.name = name;

    }

    public void setAge(int age)

    {

        this.age = age;

    }

}

public class Test

{

    public static void main(String[] args)

    {

        HashSet<Person> hs = new HashSet<>();

        hs.add(new Person("zhangsan", 23));

        hs.add(new Person("lisi", 23));

        hs.add(new Person("zhangsan", 23));

        hs.add(new Person("wangwu", 35));

        hs.add(new Person("zhangsan", 67));

        hs.add(new Person("zhaoliu", 45));

        Iterator<Person> it = hs.iterator();

        while(it.hasNext())

        {

            Person p = it.next();

            System.out.println(p.getName()+"...."+p.getAge());

        }

    }

}

最新文章

  1. 将函数传给webworker
  2. Mac OSX Versions输入username按1下都会出现2个字符,并且不能create,解决方法
  3. tableviewcell的这贴状态和传值总结
  4. [Js]弹性运动
  5. 三分--Football Goal(面积最大)
  6. SVN理解
  7. JS 浮点型数字运算(转)
  8. load 与initialize的调用顺序小结
  9. 学习javascript基础知识系列第三节 - ()()用法
  10. javascript中对象的不同创建方法
  11. CoreGraphics QuartzCore CGContextTranslateCTM 说明
  12. HDU 4052 Adding New Machine(矩形面积并)
  13. 蓝桥杯java试题《洗牌》
  14. jmeter 使用jmeter 录制 手机APP脚本
  15. HIVE metastore Duplicate key name &#39;PCS_STATS_IDX&#39; (state=42000,code=1061)
  16. 洛谷P1525 关押罪犯
  17. 如何修改DEDECMS文章标题长度
  18. 2.Liunx 系统设置
  19. ASP.NET MVC实现剪切图片
  20. C#--virtual,abstract,override,new,sealed修饰符学习

热门文章

  1. alpha8/10
  2. PAT 甲级 1019 General Palindromic Number
  3. (四)Jmeter之逻辑控制器(Logic Controller)
  4. php过滤字符串
  5. nodejs 调试
  6. Spring boot整合shiro框架(2)
  7. 【Python】python学习文件的序列化和反序列化
  8. 【bzoj2741】[FOTILE模拟赛]L 可持久化Trie树+分块
  9. C++解析(8):C++中的新成员
  10. 洛谷 P2498 [SDOI2012]拯救小云公主 解题报告