HashSet由HashMap支持,允许元素数据为空,没有重复元素,但元素无法保证有序, HashSet是非同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set, 那么它必须 保持外部同步。如果非同步,则会报错ConcurrentModificationException,其正是 因为HashSet具有fail-fast特性(该异常除调用自身remove外)。
transient: 序列化对象的时候,这个属性就不会序列化到指定的目的地中。 fail-fast: 快速失效系统一种可以立即报告任何可能表明故障的情况的系统。快速失效系统通常设计用于停止正常操作,而不是试图继续可能存在缺陷的过程。这种设计通常会在操作中的多个点检查系统的状态,因此可以及早检测到任何故障。快速失败模块的职责是检测错误,及时抛出错误,以免错误允许到下一步。
HashSet的底层是基于HashMap实现的,由源码可见,HashSet引入了HashMap的成员变量,HashSet的默认构造方法是通过new的方式创建了一个HashMap的对象,默认长度是16,负载因子是0.75.
当调用add方法向HashSet中添加元素时,添加的元素会被放入hashMap的key中,value为一个Object对象的键值对,这个Object对象是HashSet的一个常量,它是一个虚拟值,无实际含义。