ArrayList VS Vector VS LinkedList

ArrayList VS Vectorjava

相同點:
	1>都是基於Object數組實現的。
	2>都容許添加null元素。
	
不一樣點:
	1>ArrayList不是線程安全的,Vector是線程安全的(方法是Synchronized的)。
	2>ArrayList擴容後容量變爲以前的1.5倍,Vector擴容後容量是以前的2倍,故ArrayList更省空間。

	容量:
		ArrayList	初始容量:0		擴容:第一次(調用add方法時)擴展爲10,以後每次擴展爲以前的1.5倍。
			說明:
				1>雖然ArrayList類的初始容量默認爲10(private static final int DEFAULT_CAPACITY = 10;)
				2>但實際上在new ArrayList()後,ArrayList的elementData(transient Object[] elementData;)的length爲0
				3>在第一次調用add方法時,elementData的length才擴展到10
				4>若以後還須要擴展容量時,容量每次擴展爲以前的1.5倍
			
			代碼:
				1>無參構造方法:    		this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; // private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
				2>擴容1.5倍:				newCapacity = oldCapacity + (oldCapacity >> 1);
				3>擴容時對數組進行復制:	elementData = Arrays.copyOf(elementData, newCapacity);
		
		Vector		初始容量:10	擴容:每次擴展爲以前的2倍。
			代碼:
				1>無參構造方法:    		this(10);
				2>擴容2倍:					int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity); // capacityIncrement默認爲0 
				3>擴容時對數組進行復制:	elementData = Arrays.copyOf(elementData, newCapacity);

ArrayList VS LinkedList數組

相同點:
	1>都容許添加null元素。
	
不一樣點:
	1>對於隨機訪問get和set,ArrayList比LinkedList快。
	2>對於插入和刪除操做,LinkedList比較快。

相關集合:安全

1)Collections.synchronizedList(List list)
	舉例:
		List<String> syncArraylist = Collections.synchronizedList(new ArrayList<String>());	
		List<String> syncLinkedList = Collections.synchronizedList(new LinkedList<String>());
	說明:
		1>Collections.synchronizedList(List list)其實是建立了一個java.util.Collections的內部類SynchronizedList。
		2>SynchronizedList只是在本身的方法中使用同步代碼塊將List(封裝的ArrayList、linkedList等)裏相應的方法包裹了起來,故SynchronizedList的擴容方式同它封裝的list同樣。
		3>SynchronizedList還能夠指定鎖對象,如不指定,默認爲this。
	
2)CopyOnWriteArrayList:
	1>使用ReentrantLock來實現線程的同步。
	2>每添加一個元素,就進行一次數組的copy,故CopyOnWriteArrayList的寫性能很是的糟糕。
	3>多線程環境下,CopyOnWriteArrayList的讀性能比Collections.SynchronizedList的讀性能好一些(後者的get方法也被同步代碼塊包裹了,故讀性能稍差一點)。


3)Stack繼承自Vector,新增了push、pop方法。
相關文章
相關標籤/搜索