java collection之List

一、ArrayList 是無序,非線程安全的。算法

    底層有數組形式進行存放數據。在添加數據時首先回去檢查原有的數組長度是否足夠。若是原有的數組長度不足時,就會按照必定規則進行新建一個新的長度的數據,而後將舊數組的數據拷貝過去,而後在新的數據基礎上增長元素。源碼以下:數組

a、調用add方法安全

b、先判斷原有開闢的數組長度是否足夠,不足時新建數組開闢地址,並將舊數組拷貝過去數據結構

c、    最後再將須要添加的元素添加進去線程

 

一、Vector是非有序,線程安全的。3d

底層使用數組開闢存儲地址存儲數據。在添加元素時過程基本與ArrayList一致,區別在於:Vector是線程安全的,以及在自動擴展大小時擴展的算法不同。blog

a、在調用add方法時:源碼

b、add方法是使用synchronized關鍵字修飾,依然是先檢查大小,擴展的大小方式與ArrayList有區別基礎

c、    最後再將須要添加的元素添加進去add方式是使用synchronized關鍵字修飾擴展

 

三、LinkedList是有序,非線程安全的

與ArrayList和Vector的區別主要是存儲的數據結構不同 。 底層使用的是鏈表的數據結構來實現的。源碼實現以下圖

相關文章
相關標籤/搜索