(I) Koleksi dan Koleksi
Keduanya terletak di bawah paket java.util, perbedaannya adalah:
Koleksi adalah antarmuka koleksi, dengan subinterfaces umum seperti ListSet, dan merupakan simpul pertama dari grafik kerangka kerja koleksi. Ini menyediakan serangkaian metode untuk melakukan operasi dasar pada objek koleksi.
Metode umum adalah:
boolean tambahkan (e e) tambahkan elemen ke wadah; int size () mengembalikan jumlah elemen koleksi; boolean isEmpty () menentukan apakah wadah kosong; Boolean berisi (objek o) Jika koleksi ini berisi elemen yang ditentukan, ia mengembalikan true, dan metode Equals () akan digunakan di sini; Boolean hapus (objek o) Menghapus instance dari elemen yang ditentukan; dll.
Koleksi adalah kelas pembungkus yang berisi berbagai metode polimorfik statis untuk operasi pengumpulan, yang berisi algoritma polimorfik yang dioperasikan pada koleksi, yaitu "pembungkus", yang mengembalikan koleksi baru yang didukung oleh koleksi yang ditentukan, dan beberapa hal lainnya.
Metode umum adalah:
void sort (daftar) mengurutkan isi daftar.
Perlu dicatat di sini bahwa (PS: Penjelasan berikut tentang sort () dikutip dari diskusi singkat tentang array objek atau daftar penyortiran dan prinsip penyortiran koleksi . Ini melacak asal daftar dan penyortiran koleksi, dan menulisnya dengan sangat jelas)
Fungsi Badan Penyortiran dalam Sort () ini adalah arrays.sort ().
@SuppressWarnings ("Uncecked") Public Static <T Extends Comparable <? super t >> void sort (daftar <t> daftar) {objek [] array = list.toArray (); Arrays.sort (array); int i = 0; ListIterator <T> it = list.listIterator (); while (it.hasnext ()) {it.next (); it.set ((t) array [i ++]); }} Di arrays.sort (), dapat dilihat bahwa itu diimplementasikan melalui comparableTimsort.sort (objek [] a): public static void sort (objek [] array) {// mulai android-changed comparableTimsort.sort (array); // akhiri Android-changed} static void sort (objek [] a) ke statis void sort (objek [] a, int lo, int hi) ke private static void binarysort (objek [] a, int lo, int hi, int start). Di Binarysort, bagian yang digunakan untuk perbandingan ukuran adalah: Sebanding <Pape> pivot = (sebanding) a [start]; int kiri = lo; int right = mulai; menegaskan kiri <= kanan; while (kiri <kanan) {int mid = (kiri + kanan) >>> 1; if (pivot.compareto (a [mid]) <0) kanan = mid; lain kiri = mid + 1; }Satu -satunya metode antarmuka yang sebanding digunakan dalam pencarian biner: compareto (). Jika semua kelas khusus dimuat ke dalam wadah dan perlu dibandingkan, Anda harus mengimplementasikan antarmuka yang sebanding atau mewarisi kelas pembanding dan mengganti metode compareto ().
Int BinarySearch (Daftar Objek) untuk wadah daftar berurutan, metode setengah pencarian digunakan untuk menemukan objek yang ditentukan; void Reverse (daftar) mengatur objek dalam wadah daftar dalam urutan terbalik; dll.
(Ii) iterator dan iterable
Pertama, Iterable terletak di bawah paket Java.lang, dan Iterator terletak di bawah paket Java.util. Dalam kerangka kerja koleksi, tiga metode didefinisikan dalam antarmuka iterator: boolean hasnext (); e next (); void remain (). Iterable hanya mendefinisikan satu metode: iterator (), nilai pengembalian adalah objek yang mengimplementasikan antarmuka iterator. Koleksi mewarisi antarmuka super dari iterable, sehingga semua kelas implementasi dalam kerangka kerja koleksi memiliki metode iterator (), dan polimorfisme memungkinkan referensi iterator untuk mengakses bagian (yaitu, ketiga metode tersebut) dalam koleksi saat ini yang mengimplementasikan Iterator. Jika Anda perlu menghapus elemen pada saat ini, karena Iterator menyelesaikan penguncian pada operasi pengumpulan ini, Anda hanya dapat menggunakan metode hapus () iterator selama loop traversal dengan iterator, dan tidak dapat menggunakan metode collection hapus (objek) koleksi sendiri.
Jadi mengapa kita harus mengimplementasikan antarmuka iterable? Mengapa tidak secara langsung mengimplementasikan antarmuka Iterator? Dengan cara ini, kelas pengumpulan dapat secara langsung mewarisi ketiga metode ini?
Lihatlah kelas -kelas koleksi di JDK, seperti keluarga daftar atau keluarga yang ditetapkan, yang mengimplementasikan antarmuka iterable, tetapi tidak secara langsung mengimplementasikan antarmuka Iterator.
Pikirkan dengan cermat dan masuk akal.
Karena metode inti dari antarmuka iterator selanjutnya () atau hasnext () tergantung pada posisi iterasi saat ini dari iterator.
Jika pengumpulan secara langsung mengimplementasikan antarmuka iterator, itu pasti akan mengarah ke objek pengumpulan yang berisi data (pointer) dari posisi iterasi saat ini.
Ketika koleksi dilewatkan di antara metode yang berbeda, karena posisi iterasi saat ini tidak ditetapkan, hasil dari metode berikutnya () menjadi tidak dapat diprediksi.
Kecuali metode reset () ditambahkan ke antarmuka iterator untuk mengatur ulang posisi iterasi saat ini.
Namun dalam hal ini, koleksi hanya dapat memiliki satu lokasi iterasi saat ini secara bersamaan.
Iterable tidak terjadi, dan setiap panggilan mengembalikan penghitungan iterator dari awal.
Beberapa iterator tidak saling mengganggu.
Artikel di atas didasarkan pada beberapa poin pengetahuan yang membingungkan (penjelasan terperinci) dalam koleksi Java. Saya harap ini dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.