首页  

java中的list     所属分类 java 浏览量 899
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<String> list = new ArrayList<String>();
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<String> it = list.iterator();
while(it.hasNext()){
    String item = it.next();
	if("b".equals(item)){
	    it.remove();
	}
}


上一篇     下一篇
《人性的弱点》53条经典总结

kafka基础面试题

kafka核心知识点

arthas 异常排查技巧

elasticsearch 优化点

Java异常知识点