HashSet的底层是基于的HashMap去实现的这个似乎没有什么可说的这个直接看HashSet的源码
public class HashSetextends AbstractSet implements Set , Cloneable, java.io.Serializable { static final long serialVersionUID = -5024744406713321676L; private transient HashMap map; // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object(); }
从上面的代码可以看出在HashMap中的key实际上就是存储add到set中的元素在这就是这个泛型E,map的value就是一个公共的object对象。
二、HashSet默认初始化参数既然HashSet是基于HashMap去实现了,根据前面HashMap的文章在没有传递默认值的时候HashSet的默认大小是HashMap的默认大小都是16。在传递默认值的情况下才会做转换转换为大于等于当前传递值的最接近的二的整数次幂。
三、HashSet是线程安全的吗由于其内部是基于HashMap实现的HashMap是线程不安全的所以HashSet也是线程不安全的。
四、如何使用线程安全的Set容器Set
其实的只要掌握了HashMap,HashSet就是小菜一碟



