LinkedList list = new LinkedList();
list.add("hello java");//先存一個(gè)對(duì)象
list.remove("hello java");
-----------------------------
以下為源碼:
public boolean remove(Object o) {
//這里分兩種情況討論
//一.我們傳的這個(gè)Object o 對(duì)象如果是空
//二.如果對(duì)象不為空.
//我們屬于第二中情況
if (o == null) {
for (Node<E> x = first; x != null; x = x.next) {
if (x.item == null) {
unlink(x);
return true;
}
}
} else {
//情況二:
//x=first表示從表頭開(kāi)始
//x!=null 表示只要沒(méi)有到鏈表的最后就不停
//x = x.next 自增,遍歷鏈表
//通過(guò)o.equals(x.item)找到我們的元素
//進(jìn)入unlink()方法
for (Node<E> x = first; x != null; x = x.next) {
if (o.equals(x.item)) {
unlink(x);
return true;
}
}
}
return false;
--------------------------------------------------
//進(jìn)入unlink()方法
E unlink(Node<E> x){
final E element = x.item;//這個(gè)是我們最終要?jiǎng)h除的元素
final Node<E> next = x.next; //next表示被刪除元素的下一個(gè)節(jié)點(diǎn)對(duì)象
final Node<E> prev = x.prev;//prev表示被刪除元素的上一個(gè)節(jié)點(diǎn)對(duì)象
if(prev == null){ //如果被刪除元素是第一個(gè)
first = next;//如果第一個(gè)被刪除,next就是當(dāng)前第一個(gè)節(jié)點(diǎn)
}else{//如果被刪元素不是第一個(gè)
//被刪元素上一個(gè)節(jié)點(diǎn)對(duì)象的next指向被刪除元素的下一個(gè)節(jié)點(diǎn)
prev.next = next;
x.prev = null;//被刪除元素?cái)嚅_(kāi)與上一個(gè)節(jié)點(diǎn)的鏈接
}
if(next == null){//如果被刪除元素是最后一個(gè)
last = prev;//刪除最后一個(gè)節(jié)點(diǎn)后,上一個(gè)節(jié)點(diǎn)就是最后節(jié)點(diǎn)
}else{//如果不是最后一個(gè)
next.prev = prev;//下一個(gè)節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)地址指向被刪除元素的上一個(gè)節(jié)點(diǎn)對(duì)象
x.next =null;//被刪除元素?cái)嚅_(kāi)與上一個(gè)節(jié)點(diǎn)的鏈接
}
x.item = null;
size--;
mod Count++;
returen element;
}
LinkedList.png