首先LinkedList繼承了AbstractSequentialList實現了List<E>, Deque<E>, Cloneable, java.io.Serializable接口
LinkedList是一種常用的list實現,他是基于雙向鏈表(雙向鏈表:集合中的每一個元素都知道其前一個元素和后一個元素的位置)來實現的,在LinkedList中,用一個內部的Entity類來代表集合中的元素,元素的值賦給element屬性,Entity中的next屬性指向元素的后一個元素,Entity中的PRevious屬性指向元素的前一個元素,基于這樣的機制能夠實現快速的移動集合中的元素。
在創建LinkedList對象時候,首先創建一個element為null,next為null,previous為null的entity對象,并賦值給全局的header屬性
在執行構造器的時候,LinkedList將head的next及previous都指向header,以形成雙向鏈表所需要的閉環
每次通過add方法增加元素的時候,要做的就是創建一個Entity對象,并將這個Entity的next指向header,previous指向head.previous,在完成自己的next、previuos的設置后,同時將位于當前元素的后一元素的previous指向自己,并將位于當前元素的前一元素的next指向自己,這樣就保持了雙向鏈表的閉環。
LinkedList的add方法不像ArrayList那樣,要考慮擴容以及復制數組的問題,但是每增加一個元素,都會創建一個新的Entity對象,并修改相鄰的兩個元素的屬性
要刪除LinkedList中的一個元素,首先同樣遍歷整個集合中的元素,遍歷和尋找元素的方法和ArrayList基本相同,尋找到之后刪除就比ArrayList簡單多了。
刪除的時候,值需要直接刪除鏈表上的當前元素,并將當前元素中的element、previous、next設置為空,并不需要移動元素的位置
LinkedList的元素不是存儲在數組中的,所以他的get操作過程比ArrayList復雜,在執行get操作時,首先判斷傳入的index值是否小于0或大于等于當前LinkedList的size值,,不符合則拋出越界異常;如符合條件,判斷當前獲取的位置是否小于LinkedList值的一般,如果小于,則從頭一直找到index位置對應的元素,大于則從尾部往前查找
Iterator方法由父類的AbsttractList實現,當調用此方法的時候,每次都會創建一個ListItr對象,創建時候該對象符合保存cursor位置
為了判斷元素是否存在與集合中,采用的方法是遍歷所有元素,如果傳入的值為null,則找到為null的元素,傳入值為非null,則使用equals進行判斷,找到則返回true
新聞熱點
疑難解答