HashSet

Posted jin1000x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashSet相关的知识,希望对你有一定的参考价值。

HashSet是Set接口的典型实现,因此不能包含有重复元素。同时也是无序的(这个无序是指遍历HashSet时得到的元素顺序跟add进入的顺序会不一样)。此外元素可以是null,但只能添加一个null元素,并且null元素放在第一位。

new HashSet()对象其实是new HashMap()对象 这个通过看HashSet源码可以知道。

而且通过源码可以知道往HashSet添加元素时为了排除重复元素,HashSet使用了HashMap的键的去重,两者为同一段代码,也即是说原理实现与HashMap的键去重是一样的。需要注意的是:判断两个元素是否相同,先是比较它们的HashCode()返回hashCode值是否相等,并且再通过equals()判断两个对象是否相等。所以需要重写对象的hashCode()和equals(),尽量保证两个对象通过equals()方法比较返回true时,它们的hashCode()方法返回值也相等。
同时HashSet使用Hash算法存储元素,因此具有良好的存取和查询能力。往HashSet里添加一个元素时,会调用对象重写的HashCode()方法得到该对象的hashCode值。然后根据该hashCode值决定该对象在HashSet中存储的位置。

查看源码可知,new HashSet时会初始化一个大小为16的Entry数组。

以上是关于HashSet的主要内容,如果未能解决你的问题,请参考以下文章

31.set集合与HashSet

java之集合类

hashset和treeset区别

HashSet和TreeSet的区别

Java之set源码分析

Java——HashSet和TreeSet的区别