1. 程式人生 > >java ArrayList,HashMap, LinkedList的簡單概括與分析(二)

java ArrayList,HashMap, LinkedList的簡單概括與分析(二)

思來想去還是決定先談談 LinkedList,因為hashmap實際上是連結串列和陣列的特殊結合,如果不講連結串列,直接講hashmap,感覺有點太隨意了,話不多說,linkelist,是我們日常生活中比較常見的連結串列,要理解他,首先就要談談連結串列到底是什麼。 眾所周知,陣列的概念就是記憶體中一段連續的地址,計算機可以方便的讀取地址中的資料,對於查詢資料來說這無疑是很方便的一種結構,只要遍歷過去即可完成查詢,但是對於增刪改來說這種結構無疑是難纏的,如果你想刪除或增加任意一個數據,那麼大量的資料必須一起修改,這對系統開銷實在是太大了,為了解決這個問題連結串列應運而生,連結串列中的每一個節點都不是連續的,如果說陣列通過地址相鄰來儲存資料,連結串列通過直接儲存地址儲存資料。 連結串列的核心有三個資料(單向連結串列兩個,一般只有資料和後一個節點的地址),資料本身,前一個節點的地址,後一個節點的地址,與陣列相同,連結串列儲存第一個節點的地址,訪問時通過前一個節點尋找後一個節點,需要花費大量效能但對於增刪來說,僅僅只要修改極少的的資訊就可以完成 LinkedList就是一個典型的連結串列實現LinkedList中有一個內部類Entry,用於實現節點,成員方法header儲存著前一個節點的位置,它本身,同時儲存後一個節點的位置,它本身,後續節點新增時header的後一個節點變為新增的節點,同時新增的節點的後一個節點變成之前的該節點頂替的節點,同時被頂替的節點的前一個節點變成該節點,對於第一個新增的節點來說,相當於他和header互為前後節點,由此形成一個封閉的環,之後的節點相當於是為這個環新增節點,此處比較抽象應該畫圖,但是鑑於作者較懶,請自行體會,size負責存放當前節點的數量,主要方法為add,remove,get,作用分別為新增,刪除,查詢,add,remove分別對應內部類Entry的addBefore,remove方法,新增的原理上面已經說明,不再複述,刪除的原理是將該元素的前一個節點記錄的地址改為後一個節點的地址,後一個節點進行相反操作,再將當前節點的所有屬性設定為null,查詢則使用了較為巧妙的方法,首先讓你輸入一個int值,對size進行位運算,獲取該值的一半,然後進行比較,若大於,從header的前一個節點進行迴圈查詢(也可以認為是從最後一個節點進行查詢)若小於,從header的後一個節點進行迴圈查詢,最後輸出該節點