不多說,直接上干貨!
這篇我是從整體出發去寫的。
牛客網Java刷題知識點之Java 集合框架的構成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
List集合中子類 Vector、ArrayList、LinkedList
List:有序, 可重復, 有索引。三者均為可伸縮數組。
Vector:底層數據結構是數組結構。 jdk1.0版本。 線程安全的。 無論增刪還是查詢都非常慢。默認擴充為原來的2倍。
ArrayList:底層數據結構是數組結構。 線程不安全的。 所以ArrayList的出現替代了Vector, 但是查詢的速度很快。默認擴充為原來的1.5倍。
LinkedList:底層是鏈表數據結構。 線程不安全的, 同時對元素的增刪操作效率很高。但查詢慢。
注意: 鏈表結構是這樣的: 讓后一個元素記住前一個元素的地址。
Vector 和 ArrayList都是基於存儲元素的Object[ ] array來實現的。
LinkedList是采用雙向列表來實現的。
1、 線程同步,Vector線程安全,ArrayList線程不安全。
2、 效率問題,Vector效率低,ArrayList效率高。
3、 增長數量,Vector以1.5倍增長,ArrayList以2倍增長。

LinkdedList,增刪改查很快:

LinkedList的查詢速率比較慢:

List集合子類Vector這個類已經不常用了, 我就說里面的一個方法, Elements方法, 這個方法的返回值是枚舉接口, 里面有兩個方法, 判斷和獲取。此接口Enumeration的功能與 Iterator 接口的功能是重復的。Enumeration的名稱和方法的名稱過程, 書寫很麻煩。 所以被Iterator所取代。
ArrayList 、 LinkedList 、 Vector 的底層實現和區別:
ArrayList是實現了基於動態數組的數據結構,LinkedList基於雙線鏈表的數據結構。
ArrayList可以隨機定位對於新增和刪除操作add和remove,LinedList比較占優勢
具有Collection接口必備的iterator()方法外,List還提供一個listIterator()方法ListIterator多了一些add()之類的方法,允許添加,刪除,設定元素,還能向前或向后遍歷。
Vector與ArrayList唯一的區別是,Vector是線程安全的,即它的大部分方法都包含有關鍵字synchronized,因此,若對於單一線程的應用來說,最好使用ArrayList代替Vector,因為這樣效率會快很多(類似的情況有StringBuffer線程安全的與StringBuilder線程不安全的);而在多線程程序中,為了保證數據的同步和一致性,可以使用Vector代替ArrayList實現同樣的功能。
