AbstractList là một class trong Java Collection Framework, thực hiện giao diện Collection và class AbstractCollection. Class này cung cấp một phiên bản thực thi gương của giao diện List để giảm thiểu công sức cần thiết để thực hiện giao diện này dựa trên một nguồn dữ liệu truy cập ngẫu nhiên (ví dụ như một mảng). Đối với dữ liệu truy cập tuần tự như danh sách liên kết, nên sử dụng AbstractSequentialList thay vì class này.
Để thực hiện một danh sách không thể chỉnh sửa, chỉ cần mở rộng AbstractList Class và triển khai các phương thức get(int) và size(). Để triển khai một danh sách có thể chỉnh sửa, cần ghi đè phương thức set(int index, E element) (nếu không sẽ ném một UnsupportedOperationException). Nếu danh sách có kích thước có thể thay đổi, cần ghi đè các phương thức add(int, E) và remove(int).
Cấu trúc lớp:
Không có hàm khởi tạo mặc định
protected AbstractList()
Ví dụ 1:
AbstractList al = new ArrayList();
AbstractList là một lớp trừu tượng, vì vậy nó nên được gán một thể hiện của các lớp con của nó như ArrayList, LinkedList hoặc Vector.
Ví dụ 2:
Các phương thức trong AbstractList
Các phương thức được khai báo trong AbstractList:
- addAll(int index, Collection extends E> c)
Các phương thức được khai báo trong AbstractCollection:
- ...
Các phương thức được khai báo trong giao diện Collection:
- ...
Các phương thức được khai báo trong giao diện List:
- ...
Lớp AbstractList trong Java là một lớp trừu tượng cung cấp một phiên bản gương cơ bản của giao diện List. Nó là một phần của Java Collections Framework và được thiết kế để được mở rộng bởi các lớp danh sách cụ thể như ArrayList và LinkedList.
Dưới đây là một ví dụ về cách sử dụng lớp AbstractList trong Java:
Bằng cách mở rộng lớp AbstractList, bạn chỉ cần triển khai các phương thức get và size, nhờ đó có thể tạo ra một đối tượng danh sách cơ bản. Điều này có thể giúp bạn tiết kiệm rất nhiều thời gian và code so với việc triển khai giao diện List từ đầu.
Ưu điểm của việc sử dụng AbstractList trong Java:
- Giảm sự trùng lặp mã: Bằng cách sử dụng lớp AbstractList như là một cơ sở, bạn có thể giảm số lượng mã mà bạn cần viết để triển khai một danh sách, vì nhiều phương thức thông thường đã được triển khai sẵn cho bạn.
- Hành vi nhất quán: Vì lớp AbstractList triển khai nhiều phương thức trong giao diện List, bạn có thể đảm bảo rằng việc triển khai của bạn sẽ có hành vi nhất quán với các triển khai danh sách khác như ArrayList và LinkedList.
Nhược điểm của việc sử dụng AbstractList trong Java:
- Hạn chế chức năng: Vì lớp AbstractList là một lớp trừu tượng, nó chỉ cung cấp một phiên bản cơ bản của một danh sách. Bạn có thể cần triển khai các phương thức bổ sung để cung cấp đầy đủ chức năng theo yêu cầu của ứng dụng của bạn.
- Tăng độ phức tạp: Bằng cách mở rộng lớp AbstractList, bạn đang tăng độ phức tạp của mã của mình, vì bạn đang phụ thuộc vào lớp cơ sở để cung cấp một số hành vi.
Tài liệu tham khảo:
Một cuốn sách tham khảo tốt để tìm hiểu về Java Collections Framework và AbstractList là cuốn "Java Collections" của Naftalin và Wadler. Cuốn sách này cung cấp một cái nhìn toàn diện về Java collections framework, bao gồm AbstractList, và bao gồm nhiều ví dụ và bài tập giúp bạn hiểu cách sử dụng các lớp này một cách hiệu quả.