LinkedList原始碼解析

2021-09-25 16:40:27 字數 1053 閱讀 8727

linklist 和arraylist的區別在於linklist底層是以鍊錶實現的,arraylist是與陣列資料結構存在

private static class node

}transient int size = 0;//當前鍊錶長度

transient nodefirst;//鍊錶的第乙個元素

transient nodelast;//鍊錶的最後乙個元素

public linkedlist()

public linkedlist(collection<? extends e> c) //插入集合的構造方法

this();

addall(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;

}nodenode(int index) else

}獲取第乙個元素方法

public e getfirst()

public e getlast()

public e removefirst()

private e unlinkfirst(nodef)

public e removelast()

private e unlinklast(nodel)

public void addfirst(e e)

private void linkfirst(e e)

public boolean contains(object o)

public int indexof(object o)

} else

}return -1;

}

LinkedList原始碼解析

1 實現了deque,所以是雙向鍊錶,同時可以作為雙向佇列 2 未實現randomaccess,就不能隨即訪問,對於所有的資料結構都是這樣,改介面只是起到標識作用 3 實現轉殖和序列化介面 4 鍊錶就會有節點node,雙向就會有first和last節點 5 預設建構函式什麼都沒有做,鍊錶不需要初始化...

LinkedList原始碼解析

借鑑部落格 正如上面這篇部落格所述,在1.6包括1.6之前,linkedlist都是乙個環形鍊錶結構,直到1.7包括1.7之後linkedlist變成了乙個線性鍊錶結構了。如果大家不是很懂鍊錶的結構,可以去翻看上面的這篇部落格 linkedlist和arraylist同樣提供了list和serial...

LinkedList原始碼解析

private static class node 新增乙個元素 核心思想 判斷是不是末尾插入,是則末尾插入否則指定位置插入 public void add int index,e element 在末尾加上乙個元素 void linklast e e 在指定位置加上乙個元素 void linkbe...