by shihang.mai
1. 集合框架核心類圖

java集合框架.png
2. List
特別提醒方法subList(),通過原list,返回一個子list.
- 對于非結(jié)構(gòu)性的改變,都會影響彼此影響
- 對于結(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ū)別
- 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ù)的增加刪除修改
- ArrayList和Vector區(qū)別
- Vector線程安全的;ArrayList非線程安全
- 都是Object數(shù)組,但是擴(kuò)容機(jī)制不同
- 多線程訪問安全數(shù)組,一般使用CopyOnWriteArrayList
3. Set
4. queue
5. Map
詳情查看hashmap文章