1.1 list介面繼承collection介面
public
inte***ce
list
extends
collection
list adt有兩種流行的實現方式
linkedlist 類提供了list adt 的雙鏈表實現
例子
將表中所有具有偶數值的項刪除
public
static
void
removeevensver
(list
list)
}}
如果傳遞乙個linkedlist
效率高,對於乙個arraylist
即使迭代器位於需要被刪除的節點上,由於其資料需要移動,其remove()
方法是昂貴的。
1.2listiterator
介面
listiterator
是擴充套件了list
的iterator
的功能。
1.3 arraylist 類的實現
public
class
myarraylist
implements
iterable
private
void
doclear()
public
intsize()
public
boolean
isempty()
public
void
trimtosize()
public e get
(int index)
return items[index];}
public e set
(int index, e newval)
e old = items[index]
; items[index]
= newval;
return old;
}private
void
ensurecapacity
(int newcapacity)
e[] old = items;
items =
(e)new
object
[newcapacity]
;for
(int i =
0; i <
size()
; i++)}
public
boolean
add(e x)
public
void
add(
int index, e x)
for(
int i = size; i > index; i--
) items[index]
= x;
size++;}
public e remove
(int index)
size--
;return removeitem;
}@override
public iterator
iterator()
private
class
arraylistiterator
implements
iterator
@override
public e next()
return items[current++];
}public
void
remove()
}}
ensurecapacity
容量的擴充,先儲存原始陣列的乙個引用,再為新陣列分配記憶體,然後將舊內容拷貝到新陣列中。
1.4linkedlist
類的實現
public
class
mylinkedlist
implements
iterable
public e data;
public node
prev;
public node
next;
}public
mylinkedlist()
private
void
doclear()
public
intsize()
public
boolean
isempty()
public
boolean
add(e x)
public
void
add(
int index, e x)
public e get
(int index)
public e set
(int index, e newval)
public e remove
(int index)
private
void
addbefore
(node
p, e x)
private e remove
(node
p)private node
getnode
(int index)
private node
getnode
(int index,
int lower,
int upper)
if(index <
size()
/2)}
else
}return p;
}@override
public iterator
iterator()
private
class
linkedlistiterator
implements
iterator
@override
public e next()
if(!hasnext()
) e nextitem = current.data;
current = current.next;
oktoremove =
true
;return nextitem;
}public
void
remove()
mylinkedlist.
this
.remove
(current.prev)
; expectedmodcount++
; oktoremove =
false;}
}}
為了檢驗在迭代期間集合被修改的情況,迭代器在①處modcount
儲存在資料域expectedmodcount
中,在②處 如果next 已經被執行而沒有其後的remove,則布林資料域為true
,oktoremove
初始化為false
,在next
的方法中置為true
Java實現棧 佇列 鍊錶
棧 底層陣列 棧頂指標 public class mystack 自定義構造器,自定義初始化棧大小 public mystack int initsize 插入 public void push int num 刪除 public intpop 檢視 public intpeek 佇列 底層陣列 佇...
(二)棧和佇列(Java實現)
本文主要是陣列和鍊錶實現棧 鍊錶實現佇列。棧和佇列的結構都比較簡單,用鍊錶實現時都是單鏈表實現的!先進後出。先進來的元素儲存在棧的最底部,新來的元素則在棧頂堆積,直到棧滿為止 而取元素的時候,只能從棧頂取,直到棧空為止。棧有兩種方法 壓棧 push 和彈棧 pop 陣列和鍊錶都可以實現。陣列最好只實...
棧 佇列 Java實現
鍊錶實現的棧 由於棧先進後出的特性,push時要用首插法,pop也從頭部開始 push 先檢查鍊錶是否空,空則作為頭結點 再從head開始pop,也有乙個空的判斷 public class linkedstack else public intpop else public void printal...