Interface List<E>

List<E> là một collection có thứ tự, còn được gọi là một dãy (sequence). Người dùng của interface này có thể kiểm soát chính xác vị trí chèn từng phần tử vào danh sách. Ngoài ra, người dùng có thể truy cập các phần tử bằng chỉ số nguyên (vị trí trong danh sách) và tìm kiếm các phần tử trong danh sách.

Đặc điểm nổi bật của Interface List<E>

Không giống như các tập hợp (sets), các danh sách (lists) thường cho phép các phần tử trùng lặp. Điều này có nghĩa là bạn có thể có nhiều phần tử trong danh sách mà e1.equals(e2) là true.

Các danh sách cũng thường cho phép nhiều phần tử null, nếu chúng chấp nhận phần tử null.

Yêu cầu bổ sung

Interface List đặt thêm một số yêu cầu ngoài những yêu cầu được chỉ định trong Collection, đặc biệt là với các phương thức iterator, add, remove, equals, và hashCode. Điều này có nghĩa là các lớp triển khai List phải tuân thủ các quy tắc bổ sung khi ghi đè những phương thức này.

Truy cập theo chỉ số

Interface List cung cấp bốn phương thức để truy cập các phần tử dựa trên chỉ số (index). Các danh sách trong Java, giống như mảng, bắt đầu từ chỉ số 0. Tuy nhiên, một số lớp triển khai (ví dụ như LinkedList) có thể có hiệu suất khác nhau tùy thuộc vào chỉ số, nên việc duyệt qua các phần tử bằng iterator thường được ưa chuộng hơn là truy cập theo chỉ số nếu bạn không biết chắc về kiểu triển khai.

ListIterator

Interface List cung cấp một iterator đặc biệt gọi là ListIterator. Nó cho phép bạn chèn, thay thế phần tử và truy cập hai chiều, ngoài các thao tác thông thường mà Iterator cung cấp. Bạn có thể tạo ListIterator bắt đầu từ một vị trí nhất định trong danh sách.

Tìm kiếm

Interface List cung cấp hai phương thức để tìm kiếm một đối tượng cụ thể. Tuy nhiên, vì hiệu suất có thể bị ảnh hưởng, nên cần thận trọng khi sử dụng chúng, vì nhiều triển khai có thể thực hiện tìm kiếm tuần tự (linear search) tốn kém.

Chèn và xóa nhiều phần tử

Interface List cung cấp hai phương thức để chèn và xóa nhiều phần tử tại một vị trí bất kỳ trong danh sách một cách hiệu quả.

Chú ý

Mặc dù có thể chấp nhận việc một danh sách chứa chính nó như là một phần tử, nhưng điều này cần được thực hiện cẩn thận, vì các phương thức equals và hashCode có thể không được định nghĩa rõ ràng trên một danh sách như vậy.

Hạn chế trong một số triển khai

Một số lớp triển khai List có các hạn chế về các phần tử mà chúng có thể chứa. Ví dụ, một số không cho phép phần tử null, hoặc có các hạn chế về kiểu của các phần tử. Khi cố gắng thêm một phần tử không phù hợp, có thể sẽ ném ra một ngoại lệ không được kiểm tra (unchecked exception) như NullPointerException hoặc ClassCastException.

Khai báo Interface List<E> trong Java

Để sử dụng Interface List<E>, bạn cần import gói java.util vào đầu file Java của mình. Gói này cung cấp các lớp và giao diện để làm việc với các collection trong Java.

Cú pháp câu lệnh import:

Cú Pháp

import java.util.List;

Cú pháp khai báo Interface List<E>:

Cú Pháp

public interface List<E>
extends Collection<E>

Dưới đây là giải thích chi tiết về cú pháp khai báo này:

↳ public: Đây là modifier chỉ phạm vi truy cập. public nghĩa là interface List có thể được truy cập từ bất kỳ đâu trong chương trình.

↳ interface: Từ khóa khai báo interface trong Java. Interface là một tập hợp các phương thức trừu tượng (abstract methods), nghĩa là chỉ khai báo chứ không cài đặt cụ thể.

↳ List<E>: Tên interface là List và có sử dụng generic với kiểu tham số E, đại diện cho kiểu phần tử trong danh sách. Ví dụ, List<String> là danh sách các chuỗi.

↳ extends Collection<E>: Interface List kế thừa (extends) interface Collection, nghĩa là nó thừa hưởng tất cả các phương thức khai báo trong Collection<E>.

Tính năng và Quy tắc của Interface List<E>

↳ Thứ tự và Truy cập theo chỉ số: List là một tập hợp có thứ tự, nghĩa là các phần tử trong danh sách được duy trì theo một thứ tự cụ thể và có thể được truy cập bằng chỉ số (index). Chỉ số bắt đầu từ 0, cho phép bạn thêm, truy cập và xóa phần tử tại các vị trí cụ thể trong danh sách.

↳ Cho phép phần tử trùng lặp: Khác với Set, List cho phép các phần tử trùng lặp. Bạn có thể có nhiều phần tử trong danh sách mà e1.equals(e2) là true.

↳ Cho phép nhiều phần tử null: List thường cho phép nhiều phần tử null, nếu lớp triển khai chấp nhận phần tử null.

↳ Phương thức Đặc biệt: List cung cấp các phương thức để thêm, truy cập, và xóa phần tử ở các chỉ số cụ thể như add(int index, E element), get(int index), remove(int index), và set(int index, E element).

Các phương thức của Interface List<E>

Giao diện List đại diện cho một danh sách các phần tử có thứ tự. Nó cung cấp các phương thức để thêm, xóa, tìm kiếm và duyệt qua các phần tử theo vị trí. List là một cấu trúc dữ liệu hữu ích khi bạn cần làm việc với các bộ sưu tập có thứ tự và truy cập các phần tử theo chỉ số. Dưới đây là danh sách tất cả các phương thức của Interface List<E> trong Java:

↳ add(E e), addAll(Collection<? extends E> c): Thêm phần tử vào cuối danh sách.

↳ add(int index, E element), addAll(int index, Collection<? extends E> c): Chèn phần tử hoặc nhiều phần tử vào vị trí index trong danh sách.

↳ clear(): Xóa tất cả các phần tử khỏi danh sách.

↳ contains(Object o), containsAll(Collection<?> c): Kiểm tra xem danh sách có chứa phần tử hoặc tất cả các phần tử trong collection c hay không.

↳ equals(Object o): So sánh hai danh sách để xem chúng có bằng nhau hay không.

↳ get(int index): Lấy phần tử tại vị trí index trong danh sách.

↳ hashCode(): Tính toán mã băm của danh sách.

↳ indexOf(Object o), lastIndexOf(Object o): Tìm chỉ số lần xuất hiện đầu tiên hoặc cuối cùng của phần tử o trong danh sách.

↳ isEmpty(): Kiểm tra xem danh sách có rỗng hay không.

↳ iterator(), listIterator(): Trả về một iterator hoặc list iterator để duyệt qua các phần tử trong danh sách.

↳ listIterator(int index): Trả về một list iterator để duyệt qua các phần tử trong danh sách, bắt đầu từ vị trí index đã cho.

↳ remove(int index), remove(Object o), removeAll(Collection<E?> c): Xóa phần tử hoặc nhiều phần tử khỏi danh sách.

↳ replaceAll(UnaryOperator<E> operator): Thay thế mỗi phần tử trong danh sách bằng kết quả của việc áp dụng toán tử lên phần tử đó.

↳ retainAll(Collection<?> c): Giữ lại chỉ những phần tử trong danh sách này cũng có trong collection c.

↳ set(int index, E element): Thay thế phần tử tại vị trí index bằng phần tử element.

↳ size(): Trả về số lượng phần tử trong danh sách.

↳ sort(Comparator<? super E> c): Sắp xếp danh sách theo bộ so sánh đã cho.

↳ spliterator(): Tạo một Spliterator để phân chia danh sách thành các phần nhỏ hơn.

↳ subList(int fromIndex, int toIndex): Trả về một danh sách con từ vị trí fromIndex đến toIndex (không bao gồm toIndex).

Vậy là chúng ta đã tìm hiểu xong các phương thức quan trọng của giao diện List<E>. Với List, bạn có thể dễ dàng quản lý các danh sách dữ liệu có thứ tự, từ việc thêm, xóa, tìm kiếm cho đến truy cập phần tử theo vị trí.

Câu Nói Truyền Cảm Hứng

“Bắt đầu ở đâu không quan trọng, quan trọng là bạn sẵn sàng bắt đầu.” – W. Clement Stone

Không Gian Tích Cực

“Chúc bạn luôn giữ vững niềm tin và sức mạnh để vượt qua mọi thử thách trong cuộc sống.”