6.1 List接口

List接口

概述:1.List接口是Collection的直接接口,代表的是有序的Collection;

? ? ? ? ? ?2.該接口可以對(duì)列表中的每一個(gè)元素的插入位置進(jìn)行精確的控制,同時(shí)可以根據(jù)索引訪問(wèn)元素。

? ? ? ? ? ?3.實(shí)現(xiàn)接口主要有:ArrayList、LinkedList、Vector、Stack。

List接口結(jié)構(gòu)

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ī)則;

迭代器詳解

List接口實(shí)現(xiàn)類對(duì)比

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)大量元素。

ArrayList源碼解析

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,則從前向后查找; 否則,從后向前查找;

LinkedList 源碼解析

Vector( 線程安全 )

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

Vector源碼解析

Vector與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è)元素在堆棧中位置);

詳細(xì)介紹

遍歷List

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

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,734評(píng)論 18 399
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,265評(píng)論 0 62
  • Java源碼研究之容器(1) 如何看源碼 很多時(shí)候我們看源碼, 看完了以后經(jīng)常也沒(méi)啥收獲, 有些地方看得懂, 有些...
    駱駝騎士閱讀 1,070評(píng)論 0 22
  • 今天天氣真好 但是我不想聊天氣 我想撩你
    兩次歡喜閱讀 320評(píng)論 0 1
  • 青蛙 1.去天成大廈簽字 2.去找立哥 3.去找劉經(jīng)理簽共享合同 4.去吳忠,要錢。
    冠清閱讀 193評(píng)論 0 0

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