List接口
概述:1.List接口是Collection的直接接口,代表的是有序的Collection;
? ? ? ? ? ?2.該接口可以對(duì)列表中的每一個(gè)元素的插入位置進(jìn)行精確的控制,同時(shí)可以根據(jù)索引訪問(wèn)元素。
? ? ? ? ? ?3.實(shí)現(xiàn)接口主要有:ArrayList、LinkedList、Vector、Stack。

Collection:Collection 層次結(jié)構(gòu) 中的根接口。它表示一組對(duì)象,這些對(duì)象也稱為 collection 的元素。對(duì)于Collection而言,它不提供任何直接的實(shí) ? ? ? ? ? ? ? ? ? ? ?現(xiàn),所有的實(shí)現(xiàn)全部由它的子類負(fù)責(zé)。
List:繼承于Collection的接口。它代表著有序的隊(duì)列。
AbstractCollection:提供 Collection 接口的骨干實(shí)現(xiàn),以最大限度地減少了實(shí)現(xiàn)此接口所需的工作。對(duì)于我們而言要實(shí)現(xiàn)一個(gè)不可修改的 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? collection,只需擴(kuò)展此類,并提供 iterator 和 size 方法的實(shí)現(xiàn)。
AbstractList:List 接口的骨干實(shí)現(xiàn),以最大限度地減少實(shí)現(xiàn)“隨機(jī)訪問(wèn)”數(shù)據(jù)存儲(chǔ)(如數(shù)組)支持的該接口所需的工作。
AbstractSequentialList:提供了 List 接口的骨干實(shí)現(xiàn),從而最大限度地減少了實(shí)現(xiàn)受“連續(xù)訪問(wèn)”數(shù)據(jù)存儲(chǔ)(如鏈接列表)支持的此接口所需的工 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?作。從某種意義上說(shuō),此類與在列表的列表迭代器上實(shí)現(xiàn)“隨機(jī)訪問(wèn)”方法。。
LinkedList:List 接口的鏈接列表實(shí)現(xiàn)。它實(shí)現(xiàn)所有可選的列表操作。
ArrayList:該類也是實(shí)現(xiàn)了List的接口,實(shí)現(xiàn)了可變大小的數(shù)組,隨機(jī)訪問(wèn)和遍歷元素時(shí),提供更好的性能。
Iterator:迭代器。
ListIterator:系列表迭代器,允許程序員按任一方向遍歷列表、迭代期間修改列表,并獲得迭代器在列表中的當(dāng)前位置
Queue:隊(duì)列。提供隊(duì)列基本的插入、獲取、檢查操作。
Deque:一個(gè)線性 collection,支持在兩端插入和移除元素。大多數(shù) Deque 實(shí)現(xiàn)對(duì)于它們能夠包含的元素?cái)?shù)沒(méi)有固定限制,但此接口既支持有容 ? ? ? ? ? ? ? ? 量限制的雙端隊(duì)列,也支持沒(méi)有固定大小限制的雙端隊(duì)列。
Enumeration:枚舉,實(shí)現(xiàn)了該接口的對(duì)象,它生成一系列元素,一次生成一個(gè)。連續(xù)調(diào)用 nextElement 方法將返回一系列的連續(xù)元素。
應(yīng)用場(chǎng)景:如果涉及到“?!?、“隊(duì)列”、“鏈表”等操作,請(qǐng)優(yōu)先考慮用List。
? ? ? ? ? ? ? ? ? 1.對(duì)于需要快速插入、刪除元素,則需使用LinkedList;
? ? ? ? ? ? ? ? ? 2.對(duì)于需要快速訪問(wèn)元素,則需使用ArrayList;
? ? ? ? ? ? ? ? ? 3.根據(jù)單/多線程環(huán)境,使用線程非/安全的實(shí)現(xiàn)類;
其中隊(duì)列和迭代器簡(jiǎn)單介紹下:
Queue
分類:1.阻塞式隊(duì)列(隊(duì)列滿了以后再插入元素則會(huì)拋出異常)eg:ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue
2.雙端隊(duì)列(支持在頭、尾兩端插入和移除元素)eg:ArrayDeque、LinkedBlockingDeque、LinkedList
Iterator? 迭代器
簡(jiǎn)介:迭代可以簡(jiǎn)單地理解為遍歷,是一個(gè)標(biāo)準(zhǔn)化的遍歷各類容器里面的所有對(duì)象的方法類;
是一個(gè)典型的設(shè)計(jì)模式(把訪問(wèn)邏輯從不同容器中抽象處理,隱藏容器內(nèi)部結(jié)構(gòu),返回一個(gè)標(biāo)準(zhǔn)化的訪問(wèn)方法);
在Java中Iterator為一個(gè)接口,它只提供了迭代了基本規(guī)則;


ArrayList (線程不安全)
簡(jiǎn)介:ArrayList是一個(gè)動(dòng)態(tài)數(shù)組,也是我們最常用的集合。
特性:1.允許任何符合規(guī)則的元素插入甚至包括null,ArrayList是非同步的;
? ? ? ? ? ?2.初始容量分配為10,每次add會(huì)進(jìn)行容量檢查,不足時(shí)會(huì)進(jìn)行擴(kuò)容;
? ? ? ? ? ?3.適合快速訪問(wèn)數(shù)據(jù)(通過(guò)下標(biāo));
缺點(diǎn):數(shù)組是將元素在內(nèi)存中連續(xù)存放的,因此增加或刪除其中一個(gè)元素都需要移動(dòng)大量元素。

LinkedList (線程不安全)
簡(jiǎn)介:LinkedList是一個(gè)雙向鏈表,除了有ArrayList的基本操作還額外提供了get,remove,insert等方法。
特性:1.允許所有元素包括null,LinkedList是非同步的;
? ? ? ? ? ?2.不同位置添加數(shù)據(jù)方法:鏈頭插入,鏈尾插入,節(jié)點(diǎn)前插入,節(jié)點(diǎn)后插入;
? ? ? ? ? ?3.雙向鏈表查詢數(shù)據(jù):從前往后,從后往前
? ? ? ? ? ?4.適合插入刪除操作(修改元素中指針);
缺點(diǎn):鏈表中的元素在內(nèi)存中不是順序存儲(chǔ)的,而是通過(guò)存在元素中的指針聯(lián)系到一起。訪問(wèn)時(shí)需要從第一個(gè)元素開始,直到需要的元素。
? ? ? ? ? ? (get方法是通過(guò)遍歷來(lái)實(shí)現(xiàn)的)
相比ArrayList插入刪除:1.linkedList不需要執(zhí)行元素拷貝動(dòng)作,沒(méi)有牽一發(fā)而動(dòng)全身的大動(dòng)作;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.查找插入位置有加速動(dòng)作即:若index < 雙向鏈表長(zhǎng)度的1/2,則從前向后查找; 否則,從后向前查找;

Vector( 線程安全 )
簡(jiǎn)介:Vector是線程安全的動(dòng)態(tài)數(shù)組,它的操作與ArrayList幾乎一樣。

Vector與ArrayList的比較:

Stack (?線程安全?)
簡(jiǎn)介:Stack繼承自Vector,實(shí)現(xiàn)一個(gè)后進(jìn)先出的堆棧。
特點(diǎn):1.Stack提供5個(gè)額外的方法使得Vector得以被當(dāng)作堆棧使用,剛創(chuàng)建后是空棧;
? ? ? ? ? ?2.push,pop,peek(獲取棧頂元素),empty(檢測(cè)堆棧是否為空),search(檢測(cè)元素在堆棧中位置);

遍歷List
