Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Ba cách duyệt (iterate) LinkedList trong Java

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áchHướngCó index?Thêm/sửa/xóa khi duyệt?Độ phức tạp
IteratorForwardKhôngremove() OKO(n)
ListIteratorForward/BackwardCó (nextIndex/previousIndex)add/set/remove OKO(n)
for-eachForwardKhôngKhô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.