转载

Java集合系列之九:LinkedHashSet底层原理

LinkedHashSet底层原理

LinkedHashSet 是在 HashSet 基础上可以保持插入顺序的一种 Set 集合。

  1. 底层原理

    是直接继承了 HashSet ,而 HashSet 又是 HashMap 包装了一层,而 LinkedHashMapHashMap 的子类,所以 HashSet 的实现其实是依赖了 LinkedHashMap

  2. 构造方法

    总共有四个构造方法,会发现其实是调用到了 HashSet 中一个特殊的构造方法中,这个方法初始化的不是 HashMap 而是 LinkedHashMap

    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);
     }
    
     HashSet(int initialCapacity, float loadFactor, boolean dummy) {
         map = new LinkedHashMap<>(initialCapacity, loadFactor);
     }
  3. add()/remove()/contains()方法

    这三个方法在LinkedHashSet中都没有重写,直接使用的是 HashSet 中的,最终调用到 HashMap 中,而初始化的时候因为初始化的是 LinkedHashMap ,所以底层既可以保证唯一性又可以维护插入的顺序,也是依靠双向链表实现。

总结

  • LinkedHashSet 就是在 HashMap、HashSet和LinkedHashMap 的基础上进行了下封装,没有加任何变化。
  • 在保证元素唯一性的情况下还可以保证遍历顺序是插入顺序。
原文  https://segmentfault.com/a/1190000021434091
正文到此结束
Loading...