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結構...