首页 > 代码库 > HashSet的特性介绍

HashSet的特性介绍

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());        }    }}

 

HashSet的特性介绍