一、談一下博客這一問題?

      博客這個我相信已經(jīng)成為大家了解和學習技術(shù)的一個手段,但是真真正正有多少人去按照這個操作了,我看到一條1000+人看的博客,我發(fā)現(xiàn)一個簡單的小錯誤,但是我之前的1000多人難道沒發(fā)現(xiàn)嘛?這個問題值得我們深思?我不是指著作者問題,因為寫在作者,看在你,我們無權(quán)干涉,當然寫就會出現(xiàn)錯誤,畢竟程序還有BUG,我只是想說有些時候不是只要看一遍就可以我們需要是真實操作,畢竟好記性不然爛筆頭,這個問題就討論學習這個深刻的話題上來了,就遠離我們的主題了,我只是將這個問題拋出啦,引發(fā)下大家的深思,具體該怎么做,就是大家的事,因為畢竟每個人的特色都不同,當然就有自己的社會主義道路,一切按照自己的來就好,回歸正題,不知道為啥我上一篇被移除去了,但是我的群里還是收獲了2個小伙伴,這就是我寫下的動力。

二、談一下雙鏈表

      雙鏈表的優(yōu)點:對于鏈表中一個節(jié)點來說,都可以從兩個方向操作。當然這個問題自然就帶了另外一個缺點,因為前節(jié)點的存在導致更多的內(nèi)存開銷,另外在插入和刪除的時候會更加的麻煩,需要更多時間,所以說這個世界就是這樣有利就有弊,接下來我們看一下雙鏈表的結(jié)構(gòu),用張圖表示:

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

 

    頭部節(jié)點首部為空,尾部節(jié)點的下一個節(jié)點指向為空,中間節(jié)點上尾指下頭,下頭指上尾;

    1)增加一個節(jié)點,有2種情況在節(jié)點之前和節(jié)點之后;

    2)增加節(jié)點的有3種情況首節(jié)點,尾節(jié)點和中間節(jié)點;

    3)刪除同增加一樣;

    以下是Java實現(xiàn)的雙鏈表和測試代碼,大家可以看一下

    這個是定義的節(jié)點

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓 View Code

   這個是具體實現(xiàn)

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓 View Code

  這個是測試代碼

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓 View Code

二、循環(huán)鏈表

    循環(huán)鏈表我們這里用單向循環(huán)列表來描述這一問題,來述說下循環(huán)鏈表與鏈表的差距,循環(huán)的意思就是從從頭到尾,從尾到頭連起來,我們已經(jīng)知道單鏈表的概念,那么二者差距就很明顯了,單向循環(huán)鏈表就是之前的尾部的空節(jié)點指向首部節(jié)點這。還是用圖表示下單向循環(huán)鏈表:

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

     套路還是和之前一樣用代碼實現(xiàn)單向循環(huán)鏈表,這里需要提醒下注意下循環(huán)的時候,如果不消息很容易照成死循環(huán),大家在使用循環(huán)鏈表的時候需要很注意這一點。另外我們當查找最后一個節(jié)點的時候就沒有必要遍歷所有節(jié)點,因為尾部的指針的下一個節(jié)點是首部,這樣就可以將第一個和最后一個節(jié)點控制到O(1)訪問時間。下面就是代碼的實現(xiàn)。

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓 View Code

三、LinkedList源碼解讀

    老套路先看繼承結(jié)構(gòu),

public class LinkedList<E>    extends AbstractSequentialList<E>    implements List<E>, Deque<E>, Cloneable, java.io.Serializable

  AbstractSequentialList這個實現(xiàn)了get,set,add,remove等這些方法,都可以隨機訪問集合,這些操作允許將鏈接列表用作堆棧、隊列或雙端隊列。接下來說下List接口這個接口與ArrayList一樣實現(xiàn)List接口,只是ArrayList是List接口的大小可變數(shù)組的實現(xiàn),LinkedList是List接口鏈表的實現(xiàn)。這樣的結(jié)構(gòu)使得插入和刪除會優(yōu)于ArryList,但是在讀取的時候會比List差,這個在上一篇那個對比的時候相信大家可以看出來。Deque這個接口相當于是對這個擴展,提供先進先出隊列操作,以及其他堆棧和雙端隊列操作。

  接下來看構(gòu)造函數(shù):一個空參構(gòu)造,一個是集合,這里會調(diào)用addAll的方法添加到列表中;

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

    public LinkedList() {
    }
    public LinkedList(Collection<? extends E> c) {        this();
        addAll(c);
    }

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

  接下來我們看一下內(nèi)部類:

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

    private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {            this.item = element;            this.next = next;            this.prev = prev;
        }
    }

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

   這里我們很快就想起我們那個雙鏈表結(jié)構(gòu)了,不多說。

   接下來我們看一下屬性:

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

      size = 0 Node<E> Node<E> last;
    //尾節(jié)點

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

    接下來的API接口是沒有什么好說的都比較簡單,只要能看懂我上面雙鏈表的應(yīng)該看這個不是問題,這里不做過多說明。

四、結(jié)束語

    最近在搞一些基本Liunx命令和SSH,感覺進度優(yōu)點緩慢,轉(zhuǎn)還是有點費勁,不過集合寫完還會有多線程,這兩塊還是必須搞定的,還是推薦下QQ群,上次有2個小伙伴加入了,動力呀438836709

http://www.cnblogs.com/wtzbk/p/7098982.html