上篇文章我們介紹了ArrayList類(lèi)的基本的使用及其內(nèi)部的一些方法的實(shí)現(xiàn)原理,但是這種集合類(lèi)型雖然可以隨機(jī)訪(fǎng)問(wèn)數(shù)據(jù),但是如果需要?jiǎng)h除中間的元素就需要移動(dòng)一半的元素的位置,效率低下。并且它內(nèi)部是用數(shù)組來(lái)實(shí)現(xiàn)的,數(shù)組要求連續(xù)的存儲(chǔ)空間,當(dāng)數(shù)據(jù)量大的時(shí)候就極耗內(nèi)存。本篇我們介紹使用鏈表實(shí)現(xiàn)的集合LinkedList,這種類(lèi)型不需要連續(xù)的存儲(chǔ)空間,刪除數(shù)據(jù)方便,但是不支持隨機(jī)訪(fǎng)問(wèn)并且查找效率低下,幾乎是ArrayList的對(duì)立面。我們將從以下方面介紹此類(lèi)型:

  • 超接口和超類(lèi)的基本方法及實(shí)現(xiàn)

  • 內(nèi)部組成細(xì)節(jié)

  • add方法的源碼解析

  • remove方法的源碼解析

  • 低效的get方法

  • LinkedList的應(yīng)用場(chǎng)景

    一、了解LinkedList的超接口
         我們首先看到LinkedList實(shí)現(xiàn)了接口Deque,而這個(gè)接口又實(shí)現(xiàn)了Queue接口,那我們就從Queue接口看起。

public interface Queue<E> extends Collection<E> {    boolean add(E e);//添加元素
    boolean offer(E e);//添加元素
    E remove();//刪除元素
    E poll();//刪除元素
    E element();//返回頭部元素
    E peek();//返回頭部元素}


          我們可以看到該接口中聲明的每個(gè)操作都是由兩個(gè)方法對(duì)應(yīng),那這兩個(gè)方法之間有什么不同呢?調(diào)用兩種方法的任意一種都是可以完成我們所需要的大部分功能,但是當(dāng)處于特殊情況下,兩者處理方式不一樣。比如:當(dāng)鏈表為空時(shí),調(diào)用remove就會(huì)拋異常,而poll則是返回特殊值null,當(dāng)鏈表滿(mǎn)了,調(diào)用add就會(huì)拋異常,而offer就會(huì)false。(我們的LinkedList 是沒(méi)有長(zhǎng)度限制的,但是對(duì)于其他實(shí)現(xiàn)Queue的類(lèi)可能會(huì)有長(zhǎng)度限制,及可能會(huì)滿(mǎn)員)。
          看完了Queue我們看看看他的子接口Deque(雙端隊(duì)列):

        		

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式