//返回鍊錶的邏輯大小
transient
int size = 0;
//頭部節點
transient nodefirst;
//尾部節點
transient nodelast;
一,無參構造器
public
linkedlist() {}
二,有引數的構造器
public
linkedlist(collection<? extends e> c)
addall(collection
public
boolean
addall(collection<? extends e> c)
addall(int index, collection
public
boolean addall(int
index, collection<? extends e> c) else
//foreach迴圈
for (object o : a)
//在鍊錶尾部插入資料,succ == null
if (succ == null) else
//size = size + numnew ;
size += numnew;
modcount++;
return
true;
}
node node(int index)
nodenode(int
index) else
}
增
向鍊錶中插入資料 分為三種情況 :
一,在鍊錶頭部插入資料:
public void addfirst(e e)
public
void
addfirst(e e)
private
void
linkfirst(e e)
二,在鍊錶的尾部插入資料:
public void addlast(e e)
public
boolean
add(e e)
public
void
addlast(e e)
void linklast(e e)
三,在鍊錶的中部插入資料:
public void add(int index, e element)
public
void add(int
index, e element)
void linkbefore(e e, nodesucc)
public e remove(int index) {}
public e remove(int
index)
e unlink(node x) {}
e unlink(nodex) else
if (next == null) else
x.item = null;
size--;
modcount++;
return element;
}
public e set(int index, e element) {}
public e set(int
index, e element)
public e get(int index) {}
public e get(int
index)
鍊錶的 get 和 set 都呼叫了方法 node(index)
而node方法內部是 迴圈遍歷陣列. 所以get和set方法比較耗時.
而remove和add 方法只是修改了 物件的引用.時間短效率高.
arraylist 和 linkedlist 相比
arraylist查詢和修改 的複雜度為o(1); 增加和刪除的時間複雜度為o(n)
linkedlist查詢和修改的時間複雜度為o(n/2),增加和刪除的時間複雜度為o(1);
java資料結構(四) 棧
樹結構是一種描述非線性關係的資料結構。對於樹的基本概念不想過多贅述,可以自行查閱相關資料,這裡主要講解一種簡單的樹結構 二叉樹。二叉樹是樹的一種特殊形式,它有n個結點,每個結點最多有兩個子結點。二叉樹的子樹仍然是二叉樹,二叉樹的兩個子樹分別是左子樹和右子樹,因此二叉樹也是有序樹。二叉樹又分為 完全二...
資料結構與演算法Java(四)跳表
1 定義 鍊錶加多級索引的結構,提高查詢效率,類似於二分查詢 時間複雜度 查詢,插入,刪除都是o logn 空間複雜度 o n 2 問題 插入資料過多時,可能出現某2個索引結點之間的資料非常多,極端情況下,跳表會退化成單鏈表 跳表的解決方式是通過隨機函式來維護平衡性。比如隨機函式生成了值k,那我們就...
Redis資料結構詳解之Hash(四)
hash資料結構累似c 中的dictionary,大家對陣列應該比較了解,陣列是通過索引快速定位到指定元素的,無論是訪問陣列的第乙個元素還是最後乙個元素,所耗費的時間都是一樣的,但是陣列中的索引卻沒有實際意義,他只是乙個位置而已。而我們在查詢某個元素時,一般都會使用有意義的字段來做索引,這就產生啦d...