by shihang.mai
1. 集合框架核心類(lèi)圖
java集合框架.png
2. List
特別提醒方法subList()罩句,通過(guò)原list,返回一個(gè)子list.
- 對(duì)于非結(jié)構(gòu)性的改變辟拷,都會(huì)影響彼此影響
- 對(duì)于結(jié)構(gòu)性改變
- 改變的是子list,不會(huì)觸發(fā)fast-fail(因?yàn)閙odCount與expectedModCount同時(shí)改變)
- 改變的是原list,觸發(fā)fast-fail
2.1 ArrayList
ArrayList 是一個(gè)動(dòng)態(tài)數(shù)組。它由數(shù)組實(shí)現(xiàn)谜悟,隨機(jī)訪問(wèn)效率高,隨機(jī)插入北秽、隨機(jī)刪除效率低葡幸;
- 它實(shí)現(xiàn)了 RandomAccess接口,快速隨機(jī)訪問(wèn)
在遍歷List之前贺氓,可以用 if( list instanceof RamdomAccess ) 來(lái)判斷一下蔚叨。因?yàn)閷?duì)于實(shí)現(xiàn)了RandomAccess接口,直接for循環(huán)比迭代器快 - 它是非線程安全的辙培,在多線程下蔑水,可以使用Collections.synchronizedList(List l)返回一個(gè)安全的list或者用
CopyOnWriteArrayList
- 初始容量為10(在加入元素時(shí),才初始化),擴(kuò)容為1.5倍
2.2 LinkedList
LinkedList 是一個(gè)雙向鏈表虏冻。LinkedList 隨機(jī)訪問(wèn)效率低肤粱,但隨機(jī)插入弹囚、隨機(jī)刪除效率高厨相。
LinkedList可作為Stack(棧)、Queue(隊(duì)列)或Deque(雙端隊(duì)列:double-ended queue)進(jìn)行使用
2.3 其他
Vector 是矢量隊(duì)列鸥鹉,和ArrayList一樣蛮穿,它也是一個(gè)動(dòng)態(tài)數(shù)組,由數(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))府适,意義:
在兩頭,對(duì)于循環(huán)鏈表來(lái)說(shuō)肺樟,由于首尾相連檐春,還是需要處理兩頭的指針。而非循環(huán)鏈表只需要處理一邊f(xié)irst.previous/last.next么伯,所以理論上非循環(huán)鏈表更高效疟暖。恰恰在兩頭(鏈頭/鏈尾) 操作是最普遍的
- ArrayList用于數(shù)據(jù)的隨機(jī)訪問(wèn),LinkedList用于數(shù)據(jù)的增加刪除修改
- ArrayList和Vector區(qū)別
- Vector線程安全的;ArrayList非線程安全
- 都是Object數(shù)組俐巴,但是擴(kuò)容機(jī)制不同
- 多線程訪問(wèn)安全數(shù)組骨望,一般使用CopyOnWriteArrayList
3. Set
4. queue
5. Map
詳情查看hashmap文章