java中的list
所属分类 java
浏览量 1045
ArrayList,LinkedList,Vector
Collections.synchronizedList()
CopyOnWriteArrayList
ConcurrentSkipListSet (注意这个是 set ,非 list )
ArrayList 扩容
int newCapacity = oldCapacity + (oldCapacity >> 1);
原先长度的1.5倍
java.util.ConcurrentModificationException
fail-fast
在迭代集合的过程中该集合在结构上发生改变的时候,就有可能 fail-fast,抛出ConcurrentModificationException
fail-fast机制并不保证在不同步的修改下一定会抛出异常,这种机制一般仅用于检测bug
java.lang.ArrayIndexOutOfBoundsException
非线程安全
CopyOnWriteArrayList
final transient ReentrantLock lock = new ReentrantLock();
// 注意 volatile !!!
private transient volatile Object[] array;
public boolean add(E e) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
Object[] elements = getArray();
int len = elements.length;
Object[] newElements = Arrays.copyOf(elements, len + 1);
newElements[len] = e;
setArray(newElements);
return true;
} finally {
lock.unlock();
}
}
List list = new ArrayList();
list.add("a");
list.add("b");
// java.util.ConcurrentModificationException
for(String item:list){
System.out.println(item);
list.add("c");
// list.remove("b");
}
// Iterator remove 方法
Iterator it = list.iterator();
while(it.hasNext()){
String item = it.next();
if("b".equals(item)){
it.remove();
}
}
上一篇
下一篇
《人性的弱点》53条经典总结
kafka基础面试题
kafka核心知识点
arthas 异常排查技巧
elasticsearch 优化点
Java异常知识点