cad的lisp程序大集合_大数据成神之路-Java高级特性增强(CopyOnWriteArraySet)
大数据成神之路
大数据成神之路:
点我去成神之路系列目录^_^
预计更新500+篇文章,已经更新40+篇~
本系列的大纲会根据实际情况进行调整,欢迎大家关注~
导语
CopyOnWriteArraySet来啦,他有什么特性呢~ 往下看吧~
1概要
内容包括:
- CopyOnWriteArraySet介绍
- CopyOnWriteArraySet原理和数据结构
- CopyOnWriteArraySet函数列表
- CopyOnWriteArraySet源码
- CopyOnWriteArraySet示例
2CopyOnWriteArraySet介绍
它是线程安全的无序的集合,可以将它理解成线程安全的HashSet。有意思的是,CopyOnWriteArraySet和HashSet虽然都继承于共同的父类AbstractSet;但是,HashSet是通过“散列表(HashMap)”实现的,而CopyOnWriteArraySet则是通过“动态数组(CopyOnWriteArrayList)”实现的,并不是散列表。
和CopyOnWriteArrayList类似,CopyOnWriteArraySet具有以下特性:
- 它最适合于具有以下特征的应用程序:Set 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。
- 它是线程安全的。
- 因为通常需要复制整个基础数组,所以可变操作(add()、set() 和 remove() 等等)的开销很大。
- 迭代器支持hasNext(), next()等不可变操作,但不支持可变 remove()等 操作。
- 使用迭代器进行遍历的速度很快,并且不会与其他线程发生冲突。在构造迭代器时,迭代器依赖于不变的数组快照。
建议:在学习CopyOnWriteArraySet之前,先对HashSet进行了解。
3CopyOnWriteArraySet原理和数据结构
CopyOnWriteArraySet的数据结构,如下图所示:
说明:
- CopyOnWriteArraySet继承于AbstractSet,这就意味着它是一个集合。
- CopyOnWriteArraySet包含CopyOnWriteArrayList对象,它是通过CopyOnWriteArrayList实现的。而CopyOnWriteArrayList本质是个动态数组队列,所以CopyOnWriteArraySet相当于通过通过动态数组实现的“集合”! CopyOnWriteArrayList中允许有重复的元素;但是,CopyOnWriteArraySet是一个集合,所以它不能有重复集合。因此,CopyOnWriteArrayList额外提供了addIfAbsent()和addAllAbsent()这两个添加元素的API,通过这些API来添加元素时,只有当元素不存在时才执行添加操作!
- 至于CopyOnWriteArraySet的"线程安全"机制,和CopyOnWriteArrayList一样,是通过volatile和互斥锁来实现的。这个在前一章节介绍CopyOnWriteArrayList时数据结构时,已经进行了说明,这里就不再重复叙述了。
4CopyOnWriteArraySet函数列表
// 创建一个空 set。CopyOnWriteArraySet()// 创建一个包含指定 collection 所有元素的 set。CopyOnWriteArraySet(Collection extends E> c)// 如果指定元素并不存在于此 set 中,则添加它。boolean add(E e)// 如果此 set 中没有指定 collection 中的所有元素,则将它们都添加到此 set 中。boolean addAll(Collection extends E> c)// 移除此 set 中的所有元素。void clear()// 如果此 set 包含指定元素,则返回 true。boolean contains(Object o)// 如果此 set 包含指定 collection 的所有元素,则返回 true。boolean containsAll(Collection> c)// 比较指定对象与此 set 的相等性。boolean equals(Object o)// 如果此 set 不包含任何元素,则返回 true。boolean isEmpty()// 返回按照元素添加顺序在此 set 中包含的元素上进行迭代的迭代器。Iterator iterator()// 如果指定元素存在于此 set 中,则将其移除。boolean remove(Object o)// 移除此 set 中包含在指定 collection 中的所有元素。boolean removeAll(Collection> c)// 仅保留此 set 中那些包含在指定 collection 中的元素。boolean retainAll(Collection> c)// 返回此 set 中的元素数目。int size()// 返回一个包含此 set 所有元素的数组。Object[] toArray()// 返回一个包含此 set 所有元素的数组;返回数组的运行时类型是指定数组的类型。 T[] toArray(T[] a)
5CopyOnWriteArraySet示例
CopyOnWriteArraySet是通过CopyOnWriteArrayList实现的,它的API基本上都是通过调用CopyOnWriteArrayList的API来实现的。相信对CopyOnWriteArrayList了解的话,对CopyOnWriteArraySet的了解是水到渠成的事。
下面,我们通过一个例子去对比HashSet和CopyOnWriteArraySet。
import java.util.*;import java.util.concurrent.*;/* * CopyOnWriteArraySet是“线程安全”的集合,而HashSet是非线程安全的。 * 下面是“多个线程同时操作并且遍历集合set”的示例 * (01) 当set是CopyOnWriteArraySet对象时,程序能正常运行。 * (02) 当set是HashSet对象时,程序会产生ConcurrentModificationException异常。 */public class CopyOnWriteArraySetTest1 { // TODO: set是HashSet对象时,程序会出错。 //private static Set set = new HashSet(); private static Set set = new CopyOnWriteArraySet(); public static void main(String[] args) { // 同时启动两个线程对set进行操作! new MyThread("ta").start(); new MyThread("tb").start(); } private static void printAll() { String value = null; Iterator iter = set.iterator(); while(iter.hasNext()) { value = (String)iter.next(); System.out.print(value+
cad的lisp程序大集合_大数据成神之路-Java高级特性增强(CopyOnWriteArraySet)相关推荐
- 大数据成神之路(持续更新)
<2021年最新版大数据面试题全面开启更新> <2021年最新版大数据面试题全面开启更新> 已经在公众号更新文章目录: 大数据成神之路-Java高级特性增强 - 大数据成神之路 ...
- 「大数据成神之路」第三版更新完毕
点击上方蓝色字体,选择"设为星标" 回复"面试"获取更多惊喜 <大数据成神之路>是我于2019年在Github发起的一个项目: Github地址:h ...
- 大数据成神之路你知道吧?
给大家推荐一位来自一线大厂的大数据专家:王知无. 自从2019年开始,他就在Github开源了自己的<大数据成神之路>.收获6K+Star. 更是在公众号发布了180+篇原创文章.内容几乎 ...
- kafka offset保存在哪里_《Kafka成神之路》- 索引类型
在Kafka的数据路径下有很多.index和.timeindex后缀文件: .index文件,即Kafka中的位移索引文件 .timeindex文件,即时间戳索引文件. 1 OffsetIndex - ...
- 我出书了,《逆天改命——程序员成神之路》开源,从业十年大厂技术专家的一百条人生建议,建议收藏
大家好,我是启舰 我有本出版社约稿的书<逆天改命--程序员成神之路>,最终决定放弃出版社合作,开源给大家. 这本书集合了我从业十来年的经验结晶,希望能够帮到大家. 我在上学和工作期间,也总 ...
- java工程师知识架构图图_阿里技术专家教你画架构图、Java 工程师成神之路 | 2019 年 2 月收藏排行...
五一假期,头条君会推送 2019 年 1-4 月 开发者头条 上收藏最多的文章 点击链接或图片 即可阅读 喜欢请 分享到朋友圈 哦 Java 工程师成神之路(2019 正式版) 结构调整,更适合从入门 ...
- Educoder–Java高级特性(第二章)- 集合框架【笔记+参考代码】
Educoder–Java高级特性(第二章)- 集合框架[笔记+参考代码] 第一关 编程要求 请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,创建ArrayList集 ...
- lisp调用qleader端点_超经典【CAD】 lisp程序集锦、【CAD】快捷键大全(好).doc
超经典CAD lisp程序集锦 如果您使用 AutoCAD,下面的内容对您一定有帮助.在某些方面能大大提高 您的工作效率.下面的程序均以源程序方式给出,您可以使用.参考.修改它. bg.lsp 表格自 ...
- 计算机视觉、机器学习相关领域论文和源代码大集合_拔剑-浆糊的传说_新浪博客...
http://blog.csdn.net/zouxy09/article/details/8550952 顶] 计算机视觉.机器学习相关领域论文和源代码大集合--持续更新-- 计算机视觉.机器学习相关 ...
最新文章
- 【Ghost Blog】如何给Ghost Blog添加背景音乐
- ASP.NET编程中常用到的27个函数集
- DataX配置及使用
- 非静态方法可以访问Java中的静态变量/方法吗?
- ListView和RecycleView的性能比对
- 今日恐慌与贪婪指数为95 贪婪程度有所上升
- 关于go语言的测试相关内容笔记
- 删数问题(Noip1994)
- idean中jsp页面乱码_IntelliJ IDEA 控制台 乱码 有效解决办法
- VS+QT多语言实现(中文乱码问题、tr()包含不生成问题)
- Qt之如何识别小键盘(数字键盘)
- python中数字转英文_python:将数字转换成用英文表达的程序
- html的ul和li元素
- Vue3 中定义ts 对象
- 学python需要什么软件,python软件有哪些图标
- Android APP 启动时间测试
- 分布式对象和远程调用
- soso地图开放API info层详解
- 善用产业链招商,打造产业集群效应,实现产业协同发展
- 微信小商店快递单怎么一键打印;具体操作流程是什么?丨国仁猫哥