浅谈CopyOnWriteArraySet
2024-10-21 09:26:42
CopyOnWriteArraySet结构图
CopyOnWriteArraySet.png
CopyOnWriteArraySet主要方法
- public boolean add(E e);
- public boolean remove(Object o);
CopyOnWriteArraySet解读主要方法
来看一下public boolean add(E e)源码
public boolean add(E e) {
//这个al就是CopyOnWriteArrayList也就是说CopyOnWriteArraySet内部是用CopyOnWriteArrayList来实现的
return al.addIfAbsent(e);
}
//这段代码也很好理解就是首先检查原来的数组里面有没有要添加的元素,如果有的话就不要再添加了,如果没有的话,创建一个新的数组,复制之前数组元素并且添加新的元素
public boolean addIfAbsent(E e) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
// Copy while checking if already present.
// This wins in the most common case where it is not present
Object[] elements = getArray();
int len = elements.length;
Object[] newElements = new Object[len + 1];
for (int i = 0; i < len; ++i) {
if (eq(e, elements[i]))
return false; // exit, throwing away copy
else
newElements[i] = elements[i];
}
newElements[len] = e;
setArray(newElements);
return true;
} finally {
lock.unlock();
}
}
来看一下 public boolean remove(Object o)源码
public boolean remove(Object o){
return al.remove(o);
}
//调用CopyOnWriteArrayList的删除
CopyOnWriteArraySet遍历介绍
常用的遍历方式:
//one foreach 遍历
for (Object o : list) {
System.out.println(o);
}
//two 迭代器的遍历
Iterator iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
CopyOnWriteArraySet其他特性介绍
- 首先,说明一下CopyOnWriteArraySet的数据结构是什么?其实它的结构严格意义来说是一个集合,它的底层实现是利用数组,它的上层实现是CopyOnWriteArrayList。
- 其次,CopyOnWriteArraySet是一个集合,所以它是不可以放置重复的元素的,它的取重逻辑是在add中体现的。
- 最后,CopyOnWriteArraySet是利用CopyOnWriteArrayList来实现的,因为CopyOnWriteArrayList是线程安全的,所以CopyOnWriteArraySet操作也是线程安全的。
最新文章
- PKCS#1规范阅读笔记1--------基本概念
- HTML的初体验
- atitit.自适应设计悬浮图片的大小and 位置
- pthread_join和pthread_detach的用法(转)
- 让文字在标签li的底部
- 【风马一族_Android】适合你 --- 大概的描述
- SQL 插入查询的最大ID 号 进行批量
- Linux 硬连接和软连接的原理 (in使用)
- 利用SQL语句产生分组序号
- 初探swift语言的学习笔记(闭包 - 匿名函数或block块代码)
- Web Service ,WCF以及Web API的对比
- [ExtJS5学习笔记]第九节 Extjs5的mvc与mvvm框架结构简介
- Java:将字符串中的数字转换成整型
- 前端随笔 - JavaScript中的闭包
- 2019春第五周作业Compile Summarize
- Lab 9-3
- linux sed 常见字符串处理
- Codeforces841A
- loli的混合算法测试
- hdu 5036 概率+bitset
热门文章
- mysql查询之获取第n高薪水
- Consul ACL集群配置说明以及ACL Token的用法
- objectARX2010及其以上版本使用publish打印(发布)图纸,后台布局打印图纸例子浅析
- SpringBoot + Mybatis搭建完整的项目架构
- postman上传文件对参数的contentType类型设置方式
- 打印机API
- spark 预编译安装
- centos6.5升级openssh至7.9p1
- python基础_MySQL的bigint类型
- Gym102028G Shortest Paths on Random Forests 生成函数、多项式Exp