LinkedHashSet类源码解析
2016-07-17 16:37
274 查看
LinkedHashSet概述:
LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。
注意,此实现不是同步的。如果多个线程同时访问链接的哈希Set,而其中至少一个线程修改了该Set,则它必须保持外部同步。
这个时候看不出来调用了LinkedHashMap
根据上调用父类HashSet的构造函数
HashSet中的这个构造函数
这里是用到的LinkedHashMap,而LinkedHashMap,维护一个双链表,可以根据插入顺序遍历集合元素,所有LinkedHashSet也容养具有了顺序遍历集合元素的功能。
LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。
注意,此实现不是同步的。如果多个线程同时访问链接的哈希Set,而其中至少一个线程修改了该Set,则它必须保持外部同步。
package java.util; 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); } /** * Constructs a new, empty linked hash set with the default initial * capacity (16) and load factor (0.75). */ public LinkedHashSet() { super(16, .75f, true); } public LinkedHashSet(Collection<? extends E> c) { super(Math.max(2*c.size(), 11), .75f, true); addAll(c); } }
这个时候看不出来调用了LinkedHashMap
根据上调用父类HashSet的构造函数
HashSet中的这个构造函数
HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); }
这里是用到的LinkedHashMap,而LinkedHashMap,维护一个双链表,可以根据插入顺序遍历集合元素,所有LinkedHashSet也容养具有了顺序遍历集合元素的功能。
相关文章推荐
- 联想IPMI固件SMASH-CLP 管理
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究(二)
- 【NOIP2016提高A组模拟7.17】锦标赛
- 货币系统(money) 背包问题
- ATL7窗口类详细剖析
- Java并发编程:进程和线程之由来
- mysql -- 常见异常的解决办法导引
- Java基础学习第三天
- 正则表达式入门教程
- Lua学习笔记 入门的两个小程序
- 区间选点问题
- LeetCode 232. Implement Queue using Stacks
- [android] 天气app布局练习(四)
- java 知识点总结4
- Ubuntu16.04 配置PHP7.0开发环境
- hdu 5367(线段树+区间合并)
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究(一)
- Js random随机生成正整数
- OpenCV内存池管理(一)
- HTML5-1