Java集合框架——LinkedHashSet源码分析

LinkedHashSet 是基于 LinkedHashMap 来实现的,所以其迭代时可以采用插入顺序或者访问顺序。
LinkedHashSet 的源码很简单,但需要搞清楚 HashMap,LinkedHashMap,HashSet 三者的源码。
HashMap 的源码分析:http://blog.csdn.net/yx0628/article/details/79323985
LinkedHashMap 的源码分析:http://blog.csdn.net/yx0628/article/details/79331515
HashSet 的源码分析:http://blog.csdn.net/yx0628/article/details/79333718

构造函数

    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 c) {
        super(Math.max(2*c.size(), 11), .75f, true);
        addAll(c);
    }

由于 HashSet 在构造函数中显性的指出了是由 HashMap 实现的,但是看上边几个 LinkedHashSet 的构造函数,没有出现 LinkedHashMap 的身影,那是因为在 HashSet 的构造函数中,有 LinkedHashSet 的实现:

    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

所以使用 super 来调用父类的构造函数,传入第三个参数 true,即可实现通过 LinkedHashMap 来构造。

你可能感兴趣的:(Java集合框架——LinkedHashSet源码分析)