集合框架源码分析五之LinkedHashMap,LinkedHashSet
LinkedHashMap是为了解决遍历Hash表的无序问题,它内部维护了一个链表用于记录你插入元素(或你访问元素的顺序)的位置,遍历时直接遍历链表,元素的顺序即为你插入的顺序,但是Entry对象要多加两个成员变量before和after用于记录链表的前驱和后继。所以LinkedHashMap的的存储效率要低于HashMap,但是遍历效率要高于HashMap。
java.util.LinkedHashMap
/** * LinkedHashSet实际上是基于LinkedHashMap的基础上实现的, * LinkedHashSet继承自HashSet,在HashSet中有一构造方法 * HashSet(int initialCapacity, float loadFactor, boolean dummy) * 第三个参数dummy为true时new出了一个LinkedHashMap实例,以Set中的 * 元素为键,以一个Object的虚假的对象为值,所以HashSet中的元素不可能重复。 * 以下构造函数dummy都为true */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);}public LinkedHashSet(int initialCapacity) { super(initialCapacity, .75f, true);}public LinkedHashSet() { super(16, .75f, true);}public LinkedHashSet(Collection<? extends E> c) { super(Math.max(2*c.size(), 11), .75f, true); addAll(c);}}