6.1 List接口

List接口

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

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

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

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

Collection:Collection 層次結(jié)構(gòu) 中的根接口惠险。它表示一組對象苗傅,這些對象也稱為 collection 的元素。對于Collection而言班巩,它不提供任何直接的實(shí) ? ? ? ? ? ? ? ? ? ? ?現(xiàn)渣慕,所有的實(shí)現(xiàn)全部由它的子類負(fù)責(zé)。

List:繼承于Collection的接口。它代表著有序的隊(duì)列逊桦。

AbstractCollection:提供 Collection 接口的骨干實(shí)現(xiàn)眨猎,以最大限度地減少了實(shí)現(xiàn)此接口所需的工作。對于我們而言要實(shí)現(xiàn)一個(gè)不可修改的 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? collection强经,只需擴(kuò)展此類睡陪,并提供 iterator 和 size 方法的實(shí)現(xiàn)。

AbstractList:List 接口的骨干實(shí)現(xiàn)匿情,以最大限度地減少實(shí)現(xiàn)“隨機(jī)訪問”數(shù)據(jù)存儲(chǔ)(如數(shù)組)支持的該接口所需的工作兰迫。

AbstractSequentialList:提供了 List 接口的骨干實(shí)現(xiàn),從而最大限度地減少了實(shí)現(xiàn)受“連續(xù)訪問”數(shù)據(jù)存儲(chǔ)(如鏈接列表)支持的此接口所需的工 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?作码秉。從某種意義上說逮矛,此類與在列表的列表迭代器上實(shí)現(xiàn)“隨機(jī)訪問”方法。转砖。

LinkedList:List 接口的鏈接列表實(shí)現(xiàn)须鼎。它實(shí)現(xiàn)所有可選的列表操作。

ArrayList:該類也是實(shí)現(xiàn)了List的接口府蔗,實(shí)現(xiàn)了可變大小的數(shù)組晋控,隨機(jī)訪問和遍歷元素時(shí),提供更好的性能姓赤。

Iterator:迭代器赡译。

ListIterator:系列表迭代器,允許程序員按任一方向遍歷列表不铆、迭代期間修改列表蝌焚,并獲得迭代器在列表中的當(dāng)前位置

Queue:隊(duì)列。提供隊(duì)列基本的插入誓斥、獲取只洒、檢查操作。

Deque:一個(gè)線性 collection劳坑,支持在兩端插入和移除元素毕谴。大多數(shù) Deque 實(shí)現(xiàn)對于它們能夠包含的元素?cái)?shù)沒有固定限制,但此接口既支持有容 ? ? ? ? ? ? ? ? 量限制的雙端隊(duì)列距芬,也支持沒有固定大小限制的雙端隊(duì)列涝开。

Enumeration:枚舉,實(shí)現(xiàn)了該接口的對象框仔,它生成一系列元素舀武,一次生成一個(gè)。連續(xù)調(diào)用 nextElement 方法將返回一系列的連續(xù)元素离斩。

應(yīng)用場景:如果涉及到“椧眨”衷旅、“隊(duì)列”、“鏈表”等操作纵朋,請優(yōu)先考慮用List。

? ? ? ? ? ? ? ? ? 1.對于需要快速插入茄袖、刪除元素操软,則需使用LinkedList;

? ? ? ? ? ? ? ? ? 2.對于需要快速訪問元素宪祥,則需使用ArrayList聂薪;

? ? ? ? ? ? ? ? ? 3.根據(jù)單/多線程環(huán)境,使用線程非/安全的實(shí)現(xiàn)類蝗羊;


其中隊(duì)列和迭代器簡單介紹下:

Queue

分類:1.阻塞式隊(duì)列(隊(duì)列滿了以后再插入元素則會(huì)拋出異常)eg:ArrayBlockQueue藏澳、PriorityBlockingQueue、LinkedBlockingQueue

2.雙端隊(duì)列(支持在頭耀找、尾兩端插入和移除元素)eg:ArrayDeque翔悠、LinkedBlockingDeque、LinkedList

Iterator? 迭代器

簡介:迭代可以簡單地理解為遍歷野芒,是一個(gè)標(biāo)準(zhǔn)化的遍歷各類容器里面的所有對象的方法類蓄愁;

是一個(gè)典型的設(shè)計(jì)模式(把訪問邏輯從不同容器中抽象處理,隱藏容器內(nèi)部結(jié)構(gòu)狞悲,返回一個(gè)標(biāo)準(zhǔn)化的訪問方法)撮抓;

在Java中Iterator為一個(gè)接口,它只提供了迭代了基本規(guī)則摇锋;

迭代器詳解

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

ArrayList (線程不安全)

簡介:ArrayList是一個(gè)動(dòng)態(tài)數(shù)組丹拯,也是我們最常用的集合。

特性:1.允許任何符合規(guī)則的元素插入甚至包括null荸恕,ArrayList是非同步的乖酬;

? ? ? ? ? ?2.初始容量分配為10,每次add會(huì)進(jìn)行容量檢查戚炫,不足時(shí)會(huì)進(jìn)行擴(kuò)容剑刑;

? ? ? ? ? ?3.適合快速訪問數(shù)據(jù)(通過下標(biāo));

缺點(diǎn):數(shù)組是將元素在內(nèi)存中連續(xù)存放的双肤,因此增加或刪除其中一個(gè)元素都需要移動(dòng)大量元素施掏。

ArrayList源碼解析

LinkedList (線程不安全)

簡介: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ǔ)的阅酪,而是通過存在元素中的指針聯(lián)系到一起。訪問時(shí)需要從第一個(gè)元素開始汁针,直到需要的元素粘秆。

? ? ? ? ? ? (get方法是通過遍歷來實(shí)現(xiàn)的)

相比ArrayList插入刪除:1.linkedList不需要執(zhí)行元素拷貝動(dòng)作岂丘,沒有牽一發(fā)而動(dòng)全身的大動(dòng)作镜悉;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.查找插入位置有加速動(dòng)作即:若index < 雙向鏈表長度的1/2喘沿,則從前向后查找; 否則,從后向前查找猾骡;

LinkedList 源碼解析

Vector( 線程安全 )

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

Vector源碼解析

Vector與ArrayList的比較:

Vector與ArrayList的比較

Stack (?線程安全?)

簡介:Stack繼承自Vector兴想,實(shí)現(xiàn)一個(gè)后進(jìn)先出的堆棧隘蝎。

特點(diǎn):1.Stack提供5個(gè)額外的方法使得Vector得以被當(dāng)作堆棧使用,剛創(chuàng)建后是空棧襟企;

? ? ? ? ? ?2.push嘱么,pop,peek(獲取棧頂元素)顽悼,empty(檢測堆棧是否為空)曼振,search(檢測元素在堆棧中位置);

詳細(xì)介紹

遍歷List

幾種遍歷方法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔚龙,一起剝皮案震驚了整個(gè)濱河市冰评,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌木羹,老刑警劉巖甲雅,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坑填,居然都是意外死亡抛人,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門脐瑰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妖枚,“玉大人,你說我怎么就攤上這事苍在【常” “怎么了荠商?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長续誉。 經(jīng)常有香客問我莱没,道長,這世上最難降的妖魔是什么酷鸦? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任郊愧,我火速辦了婚禮,結(jié)果婚禮上井佑,老公的妹妹穿的比我還像新娘。我一直安慰自己眠寿,他們只是感情好躬翁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盯拱,像睡著了一般盒发。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狡逢,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天宁舰,我揣著相機(jī)與錄音,去河邊找鬼奢浑。 笑死蛮艰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雀彼。 我是一名探鬼主播壤蚜,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼徊哑!你這毒婦竟也來了袜刷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤莺丑,失蹤者是張志新(化名)和其女友劉穎著蟹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梢莽,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萧豆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昏名。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炕横。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖葡粒,靈堂內(nèi)的尸體忽然破棺而出份殿,到底是詐尸還是另有隱情膜钓,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布卿嘲,位于F島的核電站颂斜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拾枣。R本人自食惡果不足惜沃疮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梅肤。 院中可真熱鬧司蔬,春花似錦、人聲如沸姨蝴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽左医。三九已至授帕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浮梢,已是汗流浹背跛十。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秕硝,地道東北人芥映。 一個(gè)月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像远豺,于是被迫代替她去往敵國和親屏轰。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

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