List接口下的集合

 

結構
ArrayList 繼承了 抽象的List 實現了List接口
抽象的List繼承了抽象的Collection實現了List接口
抽象的Collection實現了Collection接口
Collection接口繼承了Iterable接口,iterator迭代器就這麼來的。
Vector也是這樣的結構。

LinkedList 繼承了 抽象的連貫的List 實現了List接口
抽象的連貫的List繼承了抽象的List
抽象的List繼承了抽象的Collection實現了List接口
抽象的Collection實現了Collection接口
Collection接口繼承了Iterable接口,iterator迭代器就這麼來的。

性能
Vector和ArrayList
 Vector在java1.0的時候存在,ArrayList在java1.2的時候存在,就性能上來說,ArrayList在遍歷,對集合元素的重新賦值,在集合最後插入元素方面都要高於Vector,在集合中隨機插入元素的速度不相上下,也就是get(),set(int index,E e),add()方法要比Vector速度更快。但是ArrayList是線程不安全的,而Vector是線程安全的。就容量來說,Vector可以指明容量和容量的增長量。ArrayList用迭代器也稍比Vector快。如果數據都一致,速度就更快。

Vector和LinkedList
Vector的在遍歷和重新給元素賦值以及在集合的最後添加元素方面速度都要高於LinkedList,但是在集合中隨機插入元素速度要慢很多,慢到LinkedList插入了幾遍,Vector還沒插完。LinkedList的迭代器也比Vector的快。我的電腦在100萬數據的情況下快了將近20毫秒。

ArrayList和LinkedList
ArrayList的隨機插入和Vector差不多,也是LinkedList插完N遍了它還沒插完的那種,Vector在遍歷,集合的最後插入元素和給元素重新賦值都要快於LinkedList,那麼ArrayList就不要談了。迭代器的速度再數據都相同的情況下,ArrayList比LInkedList快一點,我的電腦在100萬的數據下差了4毫秒,數據不同的時候差了20毫秒左右。LinkedList的迭代器是跟數據有關的,如果數據一致,迭代的速度就很快,如果不一致,就只能比Vector要快一點點了。而ArrayList和Vector的迭代器和數據是無關的。

擴展
如何把ArrayList,LinkedList變爲線程安全的?
Collections.synchronizedList(List<T>); return List<T>
Collections是一個集合的工具類,可以獲得線程安全的List,無序Map,有序Map,無序Set,有序Set。
也可以將List進行排序(sort method)。

發佈了35 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章