java集合框架

by shihang.mai

1. 集合框架核心類圖

java集合框架.png

2. List

特別提醒方法subList(),通過原list,返回一個子list.

  1. 對于非結(jié)構(gòu)性的改變,都會影響彼此影響
  2. 對于結(jié)構(gòu)性改變
  • 改變的是子list,不會觸發(fā)fast-fail(因為modCount與expectedModCount同時改變)
  • 改變的是原list,觸發(fā)fast-fail

2.1 ArrayList

ArrayList 是一個動態(tài)數(shù)組。它由數(shù)組實現(xiàn),隨機(jī)訪問效率高,隨機(jī)插入、隨機(jī)刪除效率低;

  • 它實現(xiàn)了 RandomAccess接口,快速隨機(jī)訪問
    在遍歷List之前,可以用 if( list instanceof RamdomAccess ) 來判斷一下。因為對于實現(xiàn)了RandomAccess接口,直接for循環(huán)比迭代器快
  • 它是非線程安全的,在多線程下,可以使用Collections.synchronizedList(List l)返回一個安全的list或者用CopyOnWriteArrayList
  • 初始容量為10(在加入元素時,才初始化),擴(kuò)容為1.5倍

2.2 LinkedList

LinkedList 是一個雙向鏈表。LinkedList 隨機(jī)訪問效率低,但隨機(jī)插入、隨機(jī)刪除效率高。

LinkedList可作為Stack(棧)、Queue(隊列)或Deque(雙端隊列:double-ended queue)進(jìn)行使用

2.3 其他

Vector 是矢量隊列,和ArrayList一樣,它也是一個動態(tài)數(shù)組,由數(shù)組實現(xiàn)。但ArrayList是非線程安全的,而Vector是線程安全的,所有方法加上synchronized關(guān)鍵字

Stack先進(jìn)后出

2.4 區(qū)別

  1. ArrayList和LinkedList區(qū)別
  • 非線程安全
  • ArrayList是Object數(shù)組,LinkedList是雙向鏈表(1.6之前是循環(huán)鏈表,1.7取消了循環(huán)),意義:在兩頭,對于循環(huán)鏈表來說,由于首尾相連,還是需要處理兩頭的指針。而非循環(huán)鏈表只需要處理一邊f(xié)irst.previous/last.next,所以理論上非循環(huán)鏈表更高效。恰恰在兩頭(鏈頭/鏈尾) 操作是最普遍的
  • ArrayList用于數(shù)據(jù)的隨機(jī)訪問,LinkedList用于數(shù)據(jù)的增加刪除修改
  1. ArrayList和Vector區(qū)別
  • Vector線程安全的;ArrayList非線程安全
  • 都是Object數(shù)組,但是擴(kuò)容機(jī)制不同
  • 多線程訪問安全數(shù)組,一般使用CopyOnWriteArrayList

3. Set

4. queue

5. Map

詳情查看hashmap文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容