Java LinkedHashSet
来源:互联网 发布:ip网络计算 编辑:程序博客网 时间:2024/05/16 11:05
public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable
首先,从上面代码可以看出,LinkedHashSet是HashSet的一个子类,并且实现了Set接口,Cloneable接口和Serializable接口.
LinkedHashSet和HashSet的区别在于,LinkedHashSet维护了一个双向链表来存储元素.也就是说,在LinkedHashSet中,成员变量map是一个LinkedHashMap(而在HashSet中,map是一个HashMap).
这个LinkedList定义了遍历的顺序.并且,重新insert一个已经存在的元素不会影响该元素在list中原来的位置.
LinkedHashSet可以使我们避免HashSet带来的混乱的顺序,TreeSet带来的不断增加的消耗,并且无论原先的容器是什么,只要其是Set类型,那么LinkedHashSet可以复制一份完全一样顺序的副本,并且在这个副本中,顺序是确定的.这种技术对于需要对于顺序有要求的时候非常有用.
这个类提供了所有的Set操作,并且允许null元素. 类似于HashSet,它提供常数时间的基础操作性能,如:add,contains,remove,前提是hash函数能够将元素正确的分配到各个桶中.LinkedHashSet的性能可能稍微比HashSet低一点(要维护Linked list),但是有一个例外:在LinkedHashSet上遍历时,所需要的时间和Set的Size成正比,而无论其capacity是多大.相对比的,HashSet在遍历时倾向于更加expensive,因为它的遍历时间是与capacity成正比的.
LinkedHashSet有两个影响性能的参数:初始capacity和load factor,这和HashSet一致,但是有一点不同,如果初始化时指定一个巨大的capacity,那么LinkedHashSet比HashSet表现更好,因为遍历的时候LinkedHashSet只依赖于size,而HashSet依赖于capacity.
LinkedHashSet的实现是线程不安全的,在多个线程同时改变时,需要在外部指定同步.通常可以通过:
Set s = Collections.synchronizedSet(new LinkedHashSet(...));
来创建一个线程安全的实例.
在获得了iterator时,一旦通过remove方法修改了容器,那么立刻会抛出:
ConcurrentModificationException
这是为了在并发时能够避免出错的fast-fail设计.
1.构造函数
public LinkedHashSet(int initialCapacity, float loadFactor) { super(initialCapacity, loadFactor, true);}loadFactor默认是0.75.initialCapacity如果不指定,默认是16.
- Java LinkedHashSet
- Java学习笔记-LinkedHashSet
- 【Java源码】HashSet、LinkedHashSet
- Java之LinkedHashSet
- Java Set接口LinkedHashSet
- java学习之LinkedHashSet
- Java数据结构之linkedhashset
- java.util包---LinkedHashSet
- Java源码之LinkedHashSet
- 《Java源码分析》:LinkedHashSet
- java源码:LinkedHashSet
- Java集合之LinkedHashSet
- java 集合 LinkedHashSet
- Java-HashSet/LinkedHashSet整理
- 《Java源码分析》:LinkedHashSet
- 64、java集合-LinkedHashSet
- LinkedHashSet
- LinkedHashSet
- poj3268~Silver Cow Party(dijkstra+路径反转)
- 获取随机数(max与min之间)
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- CoordinatorLayoutt +SwipeRefresh实现刷新加载多标签的咨询页
- android 和 ios中实现类似C#的BackgroundWorker接口
- Java LinkedHashSet
- OpenCV 图像分离颜色通道 split函数和mege函数的运用
- 【Codeforces-402D】-String Game (二分)
- sql server导出excel步骤
- 安装Hive On Spark 遇见的问题
- 后缀表达式的求值的算法
- [C++]什么是句柄?为什么会有句柄?
- LeetCode
- 11-12 标准IO之feof,ferror,clearerr