"Chào, Amigo!"

"Chào, Ellie!"

"Hôm nay chúng ta sẽ xem xét cấu trúc của các bộ sưu tập một lần và mãi mãi."

"Tôi đã đợi điều này lâu lắm rồi."

"Bạn đã biết bộ sưu tập là gì và bạn biết cách làm việc với chúng. Đã đến lúc sắp xếp kiến ​​thức của bạn thành một hệ thống chặt chẽ. Sau đó, nhiều câu hỏi 'tại sao' và 'làm thế nào' sẽ biến mất và hầu hết mọi thứ sẽ trở nên rõ ràng."

" Giao diện bộ sưu tập . Cấu trúc kế thừa của giao diện bộ sưu tập trông giống như sau:"

Giao diện bộ sưu tập - 1

Lưu ý hai điều.

Đầu tiên, mọi thứ bạn thấy ở đây là một giao diện.

Thứ hai, các mũi tên có nghĩa là «thừa kế».

"Nói cách khác, Danh sách, Tập hợp và Hàng đợi kế thừa Bộ sưu tập, nhưng Bản đồ thì không?"

"Vâng. Các lớp trừu tượng sau đó kế thừa các giao diện này và đến lượt nó, các triển khai mà bạn biết về kế thừa các lớp trừu tượng đó:  ArrayList, Hashtable, TreeSet,,… "

"Bạn đúng."

"Bây giờ hãy xem các phương thức của giao diện này dùng để làm gì:"

Các phương thức của giao diện Iterable<E> ::

phương pháp Sự miêu tả
Iterator<T> iterator(); Trả về một đối tượng iterator.

"Điều đó dường như không đủ."

"Chà, đó là số lượng. Đó là tất cả đối với iterator. Chúng tôi sẽ không trình bày về chúng ngay bây giờ, nhưng chúng tôi sẽ sớm trình bày chi tiết về chúng."

Các phương thức của Bộ sưu tập<E>: giao diện:

phương pháp Sự miêu tả
boolean add(E e); Thêm một phần tử vào bộ sưu tập
boolean addAll(Collection<? extends E> c); Thêm phần tử vào bộ sưu tập
void clear(); Xóa tất cả các phần tử khỏi bộ sưu tập
boolean contains(Object o); Kiểm tra xem bộ sưu tập có chứa phần tử hay không.
boolean containsAll(Collection<?> c); Kiểm tra xem bộ sưu tập có chứa các phần tử hay không.
boolean equals(Object o); Kiểm tra xem các bộ sưu tập có tương đương nhau không
int hashCode(); Trả về mã băm
boolean isEmpty(); Kiểm tra xem bộ sưu tập có trống không.
Iterator<E> iterator(); Trả về một đối tượng iterator
boolean remove(Object o); Loại bỏ một phần tử khỏi bộ sưu tập
boolean removeAll(Collection<?> c); Xóa các phần tử khỏi bộ sưu tập
boolean retainAll(Collection<?> c); Xóa tất cả các phần tử không có trong c
int size(); Trả về kích thước của bộ sưu tập
Object[] toArray(); Chuyển đổi bộ sưu tập thành một mảng
<T> T[] toArray(T[] a); Chuyển đổi bộ sưu tập thành một mảng

"Tôi đã nắm vững mọi thứ ở đây. Tôi đã sử dụng một nửa số phương pháp này và tôi đã gặp phải nửa còn lại."

"Tốt lắm, chúng ta tiếp tục đi."

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

phương pháp Sự miêu tả
void add(int index, E element); Thêm phần tử vào giữa bộ sưu tập
boolean addAll(int index, Collection<? extends E> c); Thêm phần tử vào bộ sưu tập
E get(int index); Trả về một phần tử theo chỉ số
int indexOf(Object o); Trả về chỉ số (số) của một phần tử
int lastIndexOf(Object o); Trả về chỉ số của phần tử cuối cùng.
ListIterator<E> listIterator(); Trả về một iterator cho danh sách
ListIterator<E> listIterator(int index); Trả về một iterator cho danh sách
E remove(int index); Xóa một phần tử theo chỉ mục của nó
E set(int index, E element); Đặt giá trị mới theo chỉ mục
List<E> subList(int fromIndex, int toIndex); Trả về một tập hợp con

"Không có gì hoàn toàn mới ở đây cả. Tôi đã biết hầu hết mọi thứ về các bộ sưu tập, điều mà tôi không thể không hài lòng."

"Chà, tôi nghĩ tôi có thể tìm thấy thứ gì đó sẽ làm bạn ngạc nhiên. Nhưng hãy tiếp tục kiểm tra các giao diện:"

Các phương thức của giao diện Set<E> ::

phương pháp Sự miêu tả
không có phương pháp

"Giao diện Set không có bất kỳ phương thức mới nào — chỉ những phương thức mà nó kế thừa."

"Ừ, tôi thấy giao diện Interable cũng không có gì cả.

"Mặt khác, ít phương pháp hơn có nghĩa là ít nhớ hơn!"

"Sự lạc quan khẳng định cuộc sống của bạn làm tôi hạnh phúc."

"Giao diện Set được kế thừa bởi hai giao diện với các phương thức: SortedSet và NavigableSet. Nhưng tôi sẽ không lướt qua chúng, nếu không chúng ta sẽ không bao giờ hoàn thành."

"Thay vào đó, hãy để tôi cung cấp cho bạn một bức tranh tổng quát về các lớp và giao diện mô tả các bộ sưu tập trong Java."

"Mang nó vào."

"Vậy thì ôm chặt:"

Giao diện bộ sưu tập - 2

"Oa, thật lớn!"

"Chà, nó không lớn đến thế. Ngoài ra, hãy nhớ rằng các lớp trừu tượng là hoàn toàn tùy chọn. Nhưng bạn nên nhớ lớp nào thực hiện giao diện nào. Điều đó có thể hữu ích khá thường xuyên."

"Ồ, tôi cũng muốn lưu ý rằng một số bộ sưu tập được coi là lỗi thời."

"Đó là những cái nào?"

"Tôi đang nói về các lớp Vector, Stack, Dictionary và Hashtable. Đây là các phiên bản được đồng bộ hóa (an toàn theo luồng) của các bộ sưu tập thông thường."

"Nhưng Java đã thêm một thư viện đồng thời đặc biệt với rất nhiều bộ sưu tập không chỉ có thể được truy cập từ các luồng khác mà còn có cách triển khai hiệu quả hơn nhiều.  ConcurrentHashMap hiệu quả hơn nhiều so với Hashtable ."

"Bạn có thể sử dụng các bộ sưu tập Vector, Stack, Dictionary và Hashtable, nhưng điều đó không được khuyến nghị."

"Hiểu rồi, tôi sẽ ghi nhớ điều đó."

"Cảm ơn, Ellie!"