淺談CopyOnWriteArraySet
CopyOnWriteArraySet結構圖
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操作也是執行緒安全的。
相關文章
- HashSet、TreeSet、CopyOnWriteArraySet和CopyOnWriteArrayList
- 淺淺談ReduxRedux
- 淺淺淺談JavaScript作用域JavaScript
- 淺談 PromisePromise
- 淺談mockMock
- 淺談ViewModelView
- 淺談PWA
- 淺談Disruptor
- 淺談反射反射
- 淺談vuexVue
- ElasticSearch淺談Elasticsearch
- 淺談NginxNginx
- 淺談promisePromise
- 淺談visibility
- 淺談flutterFlutter
- 淺談JMM
- Celery淺談
- 淺談JavaScriptJavaScript
- 淺談IHttpHandlerHTTP
- 淺談HTTPSHTTP
- 淺談SYNPROXY
- 淺談WebSocketWeb
- 淺談HTMLHTML
- ZooKeeper淺談
- ElasticJob淺談AST
- 淺談RMQMQ
- JUC——安全容器類(CopyOnWriteArrayList,CopyOnWriteArraySet 和 ConcurrentHashMap)HashMap
- 淺談ThinkPHP 5.0PHP
- 淺談event loopOOP
- iOS 淺談 RunloopiOSOOP
- 淺談 Trait 類AI
- React淺談setStateReact
- 淺談React HooksReactHook
- 淺談Spring框架Spring框架
- 淺談TCP/IPTCP
- 淺談promise用法Promise
- 淺談品牌管理
- 淺談Mysql索引MySql索引
- 淺談async/awaitAI