Java常见集合框架(十一):Set之LinkedHashSet、CopyOnWriteArraySet
来源:互联网 发布:淘宝店铺图片尺寸格式 编辑:程序博客网 时间:2024/06/05 22:36
LinkedHashSet
public class LinkedHashSet extends HashSet implements Set, Cloneable, Serializable
- 具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。
- 迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。
- 非同步,fail-fast。
- 继承HashSet。
构造方法
/** * 构造一个带默认初始容量 (16) 和加载因子 (0.75) 的新空链接哈希 set。 */public LinkedHashSet() { super(16, .75f, true);}/** * 构造一个与指定 collection 中的元素相同的新链接哈希 set。 */public LinkedHashSet(Collection<? extends E> c) { super(Math.max(2*c.size(), 11), .75f, true); addAll(c);}/** * 构造一个带指定初始容量和默认加载因子 (0.75) 的新空链接哈希 set。 */public LinkedHashSet(int initialCapacity) { super(initialCapacity, .75f, true);}/** * 构造一个带有指定初始容量和加载因子的新空链接哈希 set。 */public LinkedHashSet(int initialCapacity, float loadFactor) { super(initialCapacity, loadFactor, true);}
LinkedHashSet源码中只有四个构造方法,无其它成员变量或成员方法。
而构造方法均调用父类:super(initialCapacity, loadFactor, true);
HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor); }
由此可知,LinkedHashSet是基于LinkedHashMap实现的。
CopyOnWriteArraySet
public class CopyOnWriteArraySet extends AbstractSet implements Serializable
- 对其所有操作使用内部 CopyOnWriteArrayList 的 Set。
- 最适合于具有以下特征的应用程序:set 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。
- 是线程安全的。
- 因为通常需要复制整个基础数组,所以可变操作(add、set 和 remove 等等)的开销很大。
- 迭代器不支持可变 remove 操作。
- 使用迭代器进行遍历的速度很快,并且不会与其他线程发生冲突。在构造迭代器时,迭代器依赖于不变的数组快照。
- CopyOnWrite,读写分离。
成员变量
private final CopyOnWriteArrayList<E> al;
构造方法
/** * 创建一个空 set。 */public CopyOnWriteArraySet() { al = new CopyOnWriteArrayList<E>();}/** * 创建一个包含指定 collection 所有元素的 set。 */public CopyOnWriteArraySet(Collection<? extends E> c) { al = new CopyOnWriteArrayList<E>(); al.addAllAbsent(c);}
常用方法:
boolean add(E e):如果指定元素并不存在于此 set 中,则添加它。
public boolean add(E e) { //如果e不存在al中,则添加 return al.addIfAbsent(e);}
boolean remove(Object o):如果指定元素存在于此 set 中,则将其移除。
public boolean remove(Object o) { return al.remove(o);}
Iterator iterator():返回按照元素添加顺序在此 set 中包含的元素上进行迭代的迭代器。
public Iterator<E> iterator() { return al.iterator();}
boolean contains(Object o):如果此 set 包含指定元素,则返回 true。
public boolean contains(Object o) { return al.contains(o);}
由源码可知,对元素的操作均基于CopyOnWriteArrayList。至于CopyOnWriteArrayList前面文章中有讲解,这里不再做阐述。
阅读全文
0 0
- Java常见集合框架(十一):Set之LinkedHashSet、CopyOnWriteArraySet
- Java集合框架复习之规则集Set-LinkedHashSet(四)
- java集合框架之Set------02_01 HashSet LinkedHashSet
- 《Java源码解析》集合框架Set之LinkedHashSet
- Java常见集合框架(九):Set之Set、AbstractSet
- Java常见集合框架(十):Set之TreeSet、HashSet
- java集合框架之LinkedHashSet类
- Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)
- Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)
- Java集合之LinkedHashSet
- JAVA提高教程(3)-认识Set集合之LinkedHashSet
- java集合类(七)Set之LinkedHashSet&TreeSet
- 【Java集合之Set】HashSet、TreeSet、LinkedHashSet区别
- Java集合之四Set、HashSet、LinkedHashSet、TreeSet
- Java常见集合框架(二十一): Map之ConcurrentMap、ConcurrentHashMap
- java学习日记_86:集合框架之 LinkedHashSet和 TreeSet
- Java基础<十一>--->集合之List、Set
- Java常见集合框架(十二):Set之ConcurrentSkipListSet、EnumSet
- (32位汇编 八)标志寄存器
- (32位汇编 九)ADC/SBB/XCHG/MOVS/STOS/REP
- (32位汇编 十一)修改EIP的值
- (32位汇编 七)堆栈/栈(stack)
- ajaxfileupload.js上传插件的使用(php版)
- Java常见集合框架(十一):Set之LinkedHashSet、CopyOnWriteArraySet
- 在linux环境下安装php扩展
- git
- vue 2.8.2版本配置刚进入时候的默认页面
- BZOJ4182 shopping 点分治+多重背包单调队列优化
- java语言输出金额x的中文大写形式字符串
- 详解Android的事件分发机制
- Symfony框架 & Sylius电商系统的Linux终端命令(bin/console打头的命令)如何使用XDebug单步调试
- Java反射