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

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

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

  • add方法的源碼解析

  • remove方法的源碼解析

  • 低效的get方法

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

    一、了解LinkedList的超接口
         我們首先看到LinkedList實(shí)現(xiàn)了接口Deque,而這個接口又實(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();//返回頭部元素}


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

        		

網(wǎng)友評論