一、LinkedList 的全面說明
- LinkedList底層實現了雙向鏈表和雙端隊列特點
- 可以添加任意元素(元素可以重復),包括null
- 線程不安全,沒有實現同步
二、LinkedList 的底層操作機制
三、LinkedList的增刪改查案例
public class LinkedListCRUD {
public static void main(String[] args) {
LinkedList linkedList = new LinkedList();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
System.out.println(“linkedList=” + linkedList);
//演示一個刪除結點的
linkedList.remove(); // 這里默認刪除的是第一個結點
//linkedList.remove(2);
System.out.println(“linkedList=” + linkedList);
//修改某個結點對象
linkedList.set(1, 999);
System.out.println(“linkedList=” + linkedList);
//得到某個結點對象
//get(1) 是得到雙向鏈表的第二個對象韓順平循序漸進學 Java 零基礎
第 636頁
Object o = linkedList.get(1);
System.out.println(o);//999
//因為 LinkedList 是 實現了 List 接口, 遍歷方式
System.out.println(“=LinkeList 遍歷迭代器==”);
Iterator iterator = linkedList.iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
System.out.println(“next=” + next);
}
System.out.println(“=LinkeList 遍歷增強 for==”);
for (Object o1 : linkedList) {
System.out.println(“o1=” + o1);
}
System.out.println(“=LinkeList 遍歷普通 for==”);
for (int i = 0; i < linkedList.size(); i++) {
System.out.println(linkedList.get(i));
}
//老韓源碼閱讀. /* 1. LinkedList linkedList = new LinkedList();
public LinkedList() {}
2. 這時 linkeList 的屬性 first = null last = null韓順平循序漸進學 Java 零基礎
3. 執行 添加
public boolean add(E e) {
linkLast(e);
return true;
}
4.將新的結點,加入到雙向鏈表的最后
void linkLast(E e) {
final Node l = last;
final Node newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}
/
/
老韓讀源碼 linkedList.remove(); // 這里默認刪除的是第一個結點
- 執行 removeFirst
public E remove() {
return removeFirst();
}韓順平循序漸進學 Java 零基礎
第 638頁- 執行
public E removeFirst() {
final Node f = first;
if (f == null)
throw new NoSuchElementException();
return unlinkFirst(f);
}- 執行 unlinkFirst, 將 f 指向的雙向鏈表的第一個結點拿掉
private E unlinkFirst(Node f) {
// assert f == first && f != null;
final E element = f.item;
final Node next = f.next;
f.item = null;
f.next = null; // help GC
first = next;
if (next == null)
last = null;
else
next.prev = null;
size–;
modCount++;
return element;
}
*/
}
}