學習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); }
相關文章
相關標籤/搜索