java集合類庫學習記錄 LinkedList

2021-08-10 00:05:22 字數 3099 閱讀 6027

1.介紹

linkedlist是list 介面的鏈結列表實現。實現所有可選的列表操作,並且允許所有元素(包括null)。

擴充套件了abstractsequentiallist抽象類,實現了deque和queue介面。這些操作允許將鏈結列表用作堆疊、佇列和雙端佇列。

2.abstractsequentiallist

要實現乙個列表,程式設計師只需要擴充套件此類,並提供 listiterator 和 size 方法的實現即可。對於不可修改的列表,程式設計師只需要實現列表迭代器的hasnext、next、hasprevious、previous 和index 方法即可。

對於可修改的列表,程式設計師應該再另外實現列表迭代器的 set 方法。對於可變大小的列表,程式設計師應該再另外實現列表迭代器的 remove 和add 方法。

abstractsequentiallist中的方法,add,addall,remove,set,get方法和abstractlist

一樣都是基於迭代器實現的。但不同的是,在這個抽象類中沒有實現自己的迭代器,由子類linkedlist自己實現。

3.queue

除了基本的collection操作外,佇列還提供其他的插入、提取和檢查操作。每個方法都存在兩種形式:一種丟擲異常(操作失敗時),另一種返回乙個特殊值(null 或false,具體取決於操作)。插入操作的後一種形式是用於專門為有容量限制的queue 實現設計的;在大多數實現中,插入操作不會失敗。

此介面定義在雙端佇列兩端訪問元素的方法。提供插入、移除和檢查元素的方法。每種方法都存在兩種形式:一種形式在操作失敗時丟擲異常,另一種形式返回乙個特殊值(null 或false,具體取決於操作)。插入操作的後一種形式是專為使用有容量限制的deque 實現設計的;在大多數實現中,插入操作不能失敗。

4.1 構造方法以及實現

linkedlist內部是由乙個雙端佇列實現的。儲存有兩個頭尾節點,每個節點存有前向和後向的引用。

private static class node

}

擁有2個構造器,1.空參構造器,建立了乙個空的鍊錶 2.用另乙個集合初始化linkedlist。先建立了乙個空鍊錶,新增結合元素。

public linkedlist(collection extends e> c)
public boolean addall(collection extends e> c) 

public boolean addall(int index, collection extends e> c) else

for (object o : a)

if (succ == null) else

size += numnew;

modcount++;

return true;

}

4.2 基本工具方法

在linkedlist中有一些基本工具方法,linkedfirst將元素鏈結在頭部,linklast將元素鏈結在尾部,linkbefore在指定節點前鏈結元素,unlinkfirst刪除頭節點元素,unlinklast刪除尾節點元素,unlink刪除指定元素,node(index i)方法返回索引指向的節點

private void linkfirst(e e) 

/*** links e as last element.

*/void linklast(e e)

/*** inserts element e before non-null node succ.

*/void linkbefore(e e, nodesucc)

/*** unlinks non-null first node f.

*/private e unlinkfirst(nodef)

/*** unlinks non-null last node l.

*/private e unlinklast(nodel)

/*** unlinks non-null node x.

*/e unlink(nodex) else

if (next == null) else

x.item = null;

size--;

modcount++;

return element;

}

nodenode(int index)  else 

}

4.3實現了自己的listiterator迭代器

private class listitr implements listiterator

public boolean hasnext()

public e next()

public boolean hasprevious()

public e previous()

public int nextindex()

public int previousindex()

public void remove()

public void set(e e)

public void add(e e)

此外還實現了乙個反向迭代器

private class descendingiterator implements iterator

public e next()

public void remove()

}

Java 集合類學習

繼承關係圖 1 list 有序 索引 可重複 list裡存放的物件是有序的,同時也是可以重複的,list關注的是索引,擁有一系列和索引相關的方法。arraylist 陣列 快速訪問 arraylist可以理解成乙個可增長的陣列,因此可以通過索引快速訪問。linkedlist 鍊錶 快速插入 刪除 l...

java裡面集合類的個人學習記錄

關於集合類以前忘記的時候總是去翻書,現在想寫成部落格加深印象。提到集合類就容易想到陣列,那麼現在說一下陣列和集合類的主要區別 陣列的長度在定義的時候就已經確定了,而集合的長度是可變的 陣列是用來存放基本型別的資料 例如 byte,short,int等型別的資料 而集合是用來存放物件的引用。上圖是常見...

java集合學習之 常用集合類

collection介面下包括 list結構的集合類 arraylist類,linkedlist類,vector類,stack類 set結構的集合類 hashset類,treeset類,linkedhashset實現類 queue結構的集合 priorityqueue類 map介面下包括 map結構...