1、集合(Collection):存儲對象的容器,代替數組,內部提供了很多便捷的方法,提高開發效率。
Collection接口的所有元素是Object類。
位於:java.util.*;
結構如下:
2、List接口:特點:有序、有下標、可重複。
本文章主要介紹List接口系列實現類:
ArrayList: JDK1.2產物,操作速度快,底層數組實現,增刪慢、查詢快,線程不安全; 常用在展示層
LinkedList:JDK1.2產物,操作速度慢,底層鏈表實現,增刪快、查詢慢,線程不安全 ; 常用在管理層
Vector:JDK1.0 操作速度慢,底層數組實現,增刪慢、查詢快,線程安全
3、ArrryList類
1、ArrayList有兩個構造方法:
2、add()實現:
ensureExplicitCapacity(int minCapacity)判斷是否需要擴容:
grow()方法實現擴容:
數組擴容時使用Arrays.copyOf()方法
3、get(int i)
先判斷要查找的下標是否超過實際存儲數據的數組的長度;
4、E set(int i,E value)
5、E remove(int i)
注意:移除元素時,數組容量並不減少,僅僅實際長度減少
總結:ArrayList集合默認數組長度是10;
它是個動態的數組,動態擴容需要數組copy,擴容原來的0.5倍,數組進行刪除時,不改變其容量,
若想改變其容量調trimToSize()
內部藉助於一個數組實現 Object elementDate[]
線程不安全,可以存儲null
4、Vector:
是一個線程安全的類,但是操作效率不高,它與ArrayList的區別:可以認爲是它在每個方法前面加上了synchronized,(鎖標記)做到了同步線程安全。
Vector擴容是擴容1倍;
5、我們如果想要ArrayList實現線程安全:
可以使用Collections類中的方法:List list = Collections.synchronizedList(new ArrayList(...));
另外,我們根據市場的調查,對一個集合的操作,讀的操作次數遠遠遠遠遠大於寫操作,
所以,我們只需提高讀操作,我們就可以說在操作效率得到了提高,
如果我們保證安全,保證效率的情況下,我們可以使用另一類:CopyOnWriteArrayList<E>()
以複製數組的方式,保證讀效率最高。
6、LinkedList底層是個雙向鏈表
可以使用Collections類中的方法:List list = Collections.synchronizedList(new LinkedList(...));
代碼分析不做分析;