openplanning

Hướng dẫn và ví dụ Java LinkedList

  1. LinkedList
  2. LinkedList lưu trữ các phần tử như thế nào?
  3. Examples (as List)
  4. Example (as Deque)

1. LinkedList

LinkedList (Danh sách kết nối) là một trong những lớp đặc biệt nhất trong Java Collection Framework, dưới đây là các đặc điểm của nó:
  • LinkedList có thể được sử dụng như một List (danh sách), Deque (Double ended Queue) (hàng đợi 2 chiều) hoặc một stack (ngăn xếp).
  • LinkedList là không đồng bộ (non synchronized).
  • LinkedList cho phép các phần tử trùng lặp.
  • LinkedList không cho phép các phần tử null (Đặc tính của một Queue).
  • LinkedList duy trì thứ tự chèn các phần tử.
public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
LinkedList constructors
LinkedList()    

LinkedList​(Collection<? extends E> c)
LinkedList methods
void add​(int index, E element)
boolean add​(E e)
boolean addAll​(int index, Collection<? extends E> c)
boolean addAll​(Collection<? extends E> c)
void addFirst​(E e)
void addLast​(E e)
void clear()
Object clone()
boolean contains​(Object o)
Iterator<E> descendingIterator()
E element()
E get​(int index)
E getFirst()
E getLast()
int indexOf​(Object o)
int lastIndexOf​(Object o)
ListIterator<E> listIterator​(int index)
boolean offer​(E e)
boolean offerFirst​(E e)
boolean offerLast​(E e)
E peek()
E peekFirst()
E peekLast()
E poll()
E pollFirst()
E pollLast()
E pop()
void push​(E e)
E remove()
E remove​(int index)
boolean remove​(Object o)
E removeFirst()
boolean removeFirstOccurrence​(Object o)
E removeLast()
boolean removeLastOccurrence​(Object o)
E set​(int index, E element)
int size()
Spliterator<E> spliterator()
Object[] toArray()
<T> T[] toArray​(T[] a)

2. LinkedList lưu trữ các phần tử như thế nào?

LinkedList quản lý các phần tử một cách đặc biệt, khắc phục được nhược điểm của mảng. Trong phần này chúng ta sẽ phân tích xem LinkedList làm thế nào để quản lý các phần tử của nó.
Mỗi phần tử của LinkedList được bao bọc (wrap) bởi một đối tượng Node. Mỗi đối tượng Node có tham chiếu tới Node đứng trước nó, và một tham chiếu tới Node đứng sau nó. Vì vậy chúng ta có thể di chuyển từ phần tử đầu tiên tới phần tử cuối cùng của LinkedList.
Loại bỏ phần tử ra khỏi LinkedList tương đương với việc loại bỏ Node tương ứng, để làm điều đó các Node trước và sau chỉ cần cập nhập lại tham chiếu của chúng:
Việc chèn một phần tử vào LinkedList cũng được thực hiện một cách đơn giản như hình minh hoạ dưới đây:

3. Examples (as List)

LinkedList có thể được sử dụng như một List, nó hỗ trợ tất cả các phương thức được đặc tả trong interface List bao gồm cả các phương thức tuỳ chọn. Vì vậy bạn có thể truy cập vào các phần tử của LinkedList thông qua Iterator, ListIterator hoặc Stream. Các ví dụ tốt nhất về List bạn có thể tìm thấy trong bài viết dưới đây:

4. Example (as Deque)

LinkedList cũng có thể được sử dụng như một Deque (Double ended Queue), hoặc được sử dụng như một stack (ngăn xếp). Các ví dụ tốt nhất về Dequestack được đề cập trong bài viết dưới đây:
Deque (Double ended Queue) (Hàng đợi 2 chiều), giống như một hàng đợi thông thường nhưng bạn có thể truy cập vào phần tử đầu tiên và cuối cùng của nó.
Stack hoạt động theo nguyên tắc LIFO (Last In First Out) (Phần tử được trèn vào lần cuối cùng sẽ được lấy ra đầu tiên).

Các hướng dẫn Java Collections Framework

Show More