1.HashSet本质是用HashMap来存储数据的,HashMap不是线程安全的,所以HashSet也不是线程安全的
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
2.HashSet集合元素时不重复的,从add接口可以看出,存储对象中的key是集合元素,value插入了object对象,这个key是根据HashMap中的hash算法确认集合插入对象的唯一性
private static final Object PRESENT = new Object();
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
3.LinkedHashSet继承的是HashSet,唯一的区别就是存储对象是LinkedHashMap而不是HashSet,这样可以确保元素的遍历和插入的有序性
4.针对LinkedHashSet可以一句话总结下,底层数据结构由哈希表和链表组成——哈希表保证元素的唯一性,链表保证元素的有序性