普通集合小細節
- ArrayList實現RandomAccess這個標志接口,作用是說明這個類在遍歷的時候使用迭代器比較慢,因此對list的遍歷的最好處理是下面:
if (list instanceof RandomAccess) {
for(int m = 0; m < list.size(); m++){}
} else {
Iterator iter = list.iterator();
while(iter.hasNext()){}
}
Jdk自帶的unmodifyMap=Collections.unmodifiableMap(realMap)只是對原來realMap的一個視圖,直接修改realMap再用unmodifyMap取值會發現還是內容還是變化了,只是返回的視圖unmodifyMap不能修改。
guava的unmodifyMap=ImmutableMap.copyOf(realMap)原來realMap的修改不會影響unmodifyMap。或者使用ImmutableMap.builder()來構造。
非線程安全的集合可以轉換成線程安全的集合
只適合并發量少的時候用,因為返回的線程安全集合每個方法都用了synchronized關鍵字,性能很差
Collections.synchronizedMap(new HashMap());
Collections.synchronizedList(new ArrayList());
Collections.synchronizedSet(new HashSet());
- LockFreeVector無鎖隊列的基本數據結構是AtomicReferenceArray二維數組
AtomicReferenceArray<AtomicReferenceArray<E>>
ConcurrentHashMap
待續。。。
肥肥小浣熊
Aqs重寫tryAcquire、tryRelease、tryAcquireShared、tryReleaseShared