LinkedList là gì?
LinkedList implements List và Deque, lưu trữ dữ liệu dạng node liên kết đôi (doubly-linked). Phù hợp cho thêm/xóa nhiều ở đầu/giữa/cuối.
Cách 1: Iterator (chỉ tiến)
import java.util.*;
public class LinkedListIteratorDemo {
public static void main(String[] args) {
List<String> list = new LinkedList<>(Arrays.asList("Kohli", "Morgan", "Williamson", "Smith", "Kohli"));
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
Cách 2: ListIterator (tiến & lùi, có index, thêm/sửa/xóa)
import java.util.*;
public class LinkedListListIteratorDemo {
public static void main(String[] args) {
List<String> list = new LinkedList<>(Arrays.asList("Kohli", "Morgan", "Williamson", "Smith", "Kohli"));
ListIterator<String> li = list.listIterator();
while (li.hasNext()) {
System.out.println(li.next()); // forward
}
// Có thể lùi:
while (li.hasPrevious()) {
System.out.println(li.previous()); // backward
}
}
}
Cách 3: Enhanced for-loop (for-each) – đơn giản, đọc only
import java.util.*;
public class LinkedListForEachDemo {
public static void main(String[] args) {
List<String> list = new LinkedList<>(Arrays.asList("Kohli", "Morgan", "Williamson", "Smith", "Kohli"));
for (String s : list) {
System.out.println(s);
}
}
}
Kết quả (tất cả 3 cách)
Kohli
Morgan
Williamson
Smith
Kohli
So sánh nhanh
| Cách | Hướng | Có index? | Thêm/sửa/xóa khi duyệt? | Độ phức tạp |
|---|---|---|---|---|
| Iterator | Forward | Không | remove() OK | O(n) |
| ListIterator | Forward/Backward | Có (nextIndex/previousIndex) | add/set/remove OK | O(n) |
| for-each | Forward | Không | Không (ConcurrentModificationException) | O(n) |
Khuyên dùng: for-each cho đọc đơn giản. ListIterator khi cần thao tác phức tạp khi duyệt.