"Hai, Amigo!"

"Hai, Ellie!"

"Hari ini kami akan membungkus kepala kami di sekitar struktur koleksi sekali dan untuk semua."

"Saya sudah lama menunggu untuk ini."

"Anda sudah tahu apa itu koleksi, dan anda tahu cara bekerja dengannya. Sudah tiba masanya untuk menyusun pengetahuan anda ke dalam sistem yang ketat. Kemudian banyak soalan 'mengapa' dan 'bagaimana' akan hilang, dan kebanyakan perkara akan menjadi jelas."

" Antara muka koleksi . Struktur warisan antara muka koleksi kelihatan seperti ini:"

Antara muka koleksi - 1

Perhatikan dua perkara.

Pertama, semua yang anda lihat di sini ialah antara muka.

Kedua, anak panah bermaksud «warisan».

"Dengan kata lain, Senarai, Set dan Baris Gilir mewarisi Koleksi, tetapi Peta tidak?"

"Ya. Kelas abstrak kemudian mewarisi antara muka ini dan, seterusnya, pelaksanaan yang anda ketahui tentang mewarisi kelas abstrak tersebut:  ArrayList, Hashtable, TreeSet,… "

"Betul kata awak."

"Sekarang mari kita lihat untuk apa kaedah antara muka ini:"

Kaedah antara muka Iterable<E> ::

Kaedah Penerangan
Iterator<T> iterator(); Mengembalikan objek lelaran.

"Itu nampaknya tidak mencukupi."

"Nah, itu jumlahnya. Itu sahaja untuk iterator. Kami tidak akan membincangkannya sekarang, tetapi kami akan membincangkannya secara terperinci tidak lama lagi."

Kaedah Pengumpulan <E>: antara muka:

Kaedah Penerangan
boolean add(E e); Menambah elemen pada koleksi
boolean addAll(Collection<? extends E> c); Menambah elemen pada koleksi
void clear(); Mengalih keluar semua elemen daripada koleksi
boolean contains(Object o); Semak untuk melihat sama ada koleksi mengandungi elemen.
boolean containsAll(Collection<?> c); Semak untuk melihat sama ada koleksi mengandungi elemen.
boolean equals(Object o); Semak untuk melihat sama ada koleksi adalah setara
int hashCode(); Mengembalikan kod cincang
boolean isEmpty(); Semak untuk melihat sama ada koleksi kosong.
Iterator<E> iterator(); Mengembalikan objek lelaran
boolean remove(Object o); Mengalih keluar elemen daripada koleksi
boolean removeAll(Collection<?> c); Mengalih keluar elemen daripada koleksi
boolean retainAll(Collection<?> c); Mengeluarkan semua elemen yang tiada dalam c
int size(); Mengembalikan saiz koleksi
Object[] toArray(); Menukar koleksi kepada tatasusunan
<T> T[] toArray(T[] a); Menukar koleksi kepada tatasusunan

"Saya sudah mantap dalam segala-galanya di sini. Saya telah menggunakan separuh daripada kaedah ini, dan saya telah menemui separuh lagi."

"Bagus, mari kita teruskan."

Kaedah Senarai  <E>: antara muka:

Kaedah Penerangan
void add(int index, E element); Menambah elemen pada bahagian tengah koleksi
boolean addAll(int index, Collection<? extends E> c); Menambah elemen pada koleksi
E get(int index); Mengembalikan elemen mengikut indeks
int indexOf(Object o); Mengembalikan indeks (nombor) elemen
int lastIndexOf(Object o); Mengembalikan indeks elemen terakhir.
ListIterator<E> listIterator(); Mengembalikan iterator untuk senarai
ListIterator<E> listIterator(int index); Mengembalikan iterator untuk senarai
E remove(int index); Mengalih keluar elemen mengikut indeksnya
E set(int index, E element); Menetapkan nilai baharu mengikut indeks
List<E> subList(int fromIndex, int toIndex); Mengembalikan subkoleksi

"Tiada apa-apa yang sangat baru di sini sama ada. Saya sudah tahu hampir segala-galanya tentang koleksi, yang saya tidak dapat mengelak daripada gembira."

"Nah, saya rasa saya boleh temui sesuatu yang akan mengejutkan anda. Tetapi mari kita teruskan memeriksa antara muka:"

Kaedah Set <E>: antara muka:

Kaedah Penerangan
Tiada kaedah

"Antara muka Set tidak mempunyai sebarang kaedah baharu — hanya kaedah yang diwarisi."

"Ya, saya melihat bahawa antara muka Interable juga tidak mempunyai apa-apa.

"Sebaliknya, kaedah yang lebih sedikit bermakna kurang diingat!"

"Keyakinan hidup anda yang mengesahkan kehidupan membuatkan saya gembira."

"Antara muka Set diwarisi oleh dua antara muka dengan kaedah: SortedSet dan NavigableSet. Tetapi saya tidak akan membincangkannya, atau kami tidak akan menyelesaikannya."

"Sebaliknya, izinkan saya memberi anda gambaran umum tentang kelas dan antara muka yang menerangkan koleksi dalam Java."

"Bawalah."

"Kemudian pegang erat-erat:"

Antara muka koleksi - 2

"Wah, besarnya!"

"Nah, ia tidak begitu besar. Juga, ingat bahawa kelas abstrak adalah pilihan sepenuhnya. Tetapi adalah baik untuk mengingati kelas mana yang melaksanakan antara muka yang mana. Itu boleh menjadi berguna dengan kerap."

"Oh, saya juga ingin ambil perhatian bahawa beberapa koleksi dianggap usang."

"Yang manakah itu?"

"Saya bercakap tentang kelas Vektor, Tindanan, Kamus dan Hashtable. Ini adalah versi disegerakkan (selamat untuk benang) bagi koleksi biasa."

"Tetapi Java telah menambah perpustakaan konkurensi khas dengan banyak koleksi yang bukan sahaja boleh diakses daripada rangkaian lain, tetapi juga mempunyai pelaksanaan yang lebih cekap.  ConcurrentHashMap jauh lebih cekap daripada Hashtable ."

"Anda boleh menggunakan koleksi Vektor, Tindanan, Kamus dan Hashtable, tetapi ia tidak disyorkan."

"Faham, saya akan ingat itu."

"Terima kasih, Ellie!"