HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
HashSet 允许有 null 值。
HashSet 是无序的,即不会记录插入的顺序。
HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
hashset底层由hashmap实现(泛型key,值object,在hashmap中是present常量对象)
hashset的值存放在hashmap的key上
底层hashmap的value都是present对象
特点:
1、不能保证元素的排序、顺序有可能发生变化(无序)
2、HashSet不是同步的,如果多个线程同时访问一个HashSet,如果有2条或者两条以上的线程
同时修改了HashSet集合时,必须通过代码来保证其同部
3、结合元素可以时null
HashSet 实现了 Set 接口。
![](https://img-blog.csdnimg.cn/img_convert/4d0d5f01c62bc9b4a9ba43cff7718b7b.png)
HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。
基本类型对应的包装类表如下: