雙向循環鏈表是經典資料結構,每個節點擁有前驅與後繼指針,首尾相連形成環。本文提供兩種完整實作風格並深度對比差異。
特點:支援同時存在多條鏈表,靜態 Map<String, Integer> 記錄各鏈表長度,節點持有 linkedId 關聯。
public class BothwayLoopLinked {
private static final Map<String, Integer> sizeMap = new HashMap<>();
private String linkedId = null;
private Object data = null;
private BothwayLoopLinked prev = this; // 初始自環
private BothwayLoopLinked next = this;
...
}
特點:頭節點為哨兵,不存儲數據;泛型 Node<E>;靜態 size 單鏈表計數。
public class Node<E> {
private E element;
private Node<E> next;
private Node<E> previous;
private static int size = 0;
...
}
index > size/2 反向遍歷優化for 迴圈邏輯與實作一不同| 維度 | 實作一(UUID 多鏈表) | 實作二(哨兵單鏈表) |
|---|---|---|
| 頭節點角色 | 普通數據節點,自環初始化 | 哨兵節點,不存數據 |
| 多鏈表支援 | 原生支援(UUID 隔離) | 靜態 size 單例模式,不支援多實例 |
| get(index) 遍歷 | 從 head.next 開始(跳過哨兵邏輯) | 從 head 開始,首次不進迴圈直接返回 |
| 泛型支援 | Object,需轉型 | 完整泛型 Node<E> |
| 適用場景 | 框架級、多鏈表共存、需節點身份識別 | 教學演示、單鏈表、類型安全要求高 |
java.util.LinkedList(雙向鏈表,非循環)或 ArrayDequeLinkedList 實現邏輯層循環Collections.synchronizedList 或鎖)