学习JDK1.8集合源码之--LinkedHashSet

1. LinkedHashSet简介

  LinkedHashSet继承自HashSet,故拥有HashSet的所有API,LinkedHashSet内部实现简单,核心参数和方法都继承自HashSet,只是重写了spliterator一个方法。java

  HashSet底层经过HashMap进行数据存储,而LinkedHashSet则是经过LinkedHashMap进行数据存储,故LinkedHashSet是一个有序的不可重复集合,非线程安全。安全

2. LinkedHashSet实现

//继承自HashSet,实现了Set、Cloneable、java.io.Serializable接口
public
class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable { private static final long serialVersionUID = -2851667679971038690L;
   //传入初始容量和加载因子
public LinkedHashSet(int initialCapacity, float loadFactor) { super(initialCapacity, loadFactor, true); }
   //传入初始容量,加载因子默认0.75
public LinkedHashSet(int initialCapacity) { super(initialCapacity, .75f, true); }
   //无参构造,默认初始容量16,加载因子0.75
public LinkedHashSet() { super(16, .75f, true); }
   //传入一个集合
public LinkedHashSet(Collection<? extends E> c) {
     //初始容量取集合c大小的2倍与11的最大值,加载因子0.75
super(Math.max(2*c.size(), 11), .75f, true);
     //将集合内全部元素添加进来 addAll(c); } @Override
public Spliterator<E> spliterator() { return Spliterators.spliterator(this, Spliterator.DISTINCT | Spliterator.ORDERED); } }

  LinkedHashSet的源码不多,构造方法都是调用的父类HashSet的同一个构造方法,而这个构造方法也只是提供给LinkedHashSet使用的。ide

  LinkedHashSet和HashSet的惟一区别就是底层由LInkedHashMap存储数据,从而保证了有序性。this

HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); }
相关文章
相关标签/搜索