Java Collection API menyediakan beberapa kelas kolom dan antarmuka untuk membantu kami menyimpan dan mengelola koleksi objek. Faktanya, koleksi di Java bekerja seperti array, tetapi ukuran koleksi dapat diubah secara dinamis, dan koleksi juga menyediakan fungsi yang lebih maju. Dengan API Javacollection, kami tidak perlu menulis kelas koleksi sendiri. Sebagian besar kelas koleksi Java terletak di paket java.util , dan beberapa kelas koleksi terkait konkurensi terletak di paket java.util.concurrent . Berikut adalah beberapa kelas koleksi yang disediakan oleh Java API.
1. Tinjauan Koleksi Java
Ada dua kategori koleksi di Java, yaitu:
1. Koleksi
2. Peta
Koleksi kelas pengumpulan dapat dipahami sebagai terutama menyimpan objek tunggal, sedangkan koleksi kelas peta terutama menyimpan objek nilai kunci. Kedua kategori ini dapat diterima begitu saja untuk sesuai dengan dua antarmuka, yaitu Collection接口dan Map接口. Gambar berikut mencantumkan pohon warisan dari kedua antarmuka ini:
Dari gambar di atas, kita dapat melihat bahwa antarmuka koleksi telah memperoleh tiga cabang, yaitu:
1. Daftar
2. Set
3. Antrian
Peta relatif sederhana, dengan hanya satu cabang. Di bawah ini kami akan memperkenalkan setiap kelas implementasi koleksi Java secara detail.
Catatan: Untuk membedakan koleksi dan koleksi, koleksi adalah antarmuka untuk koleksi, dan koleksi adalah kelas alat, yang menyediakan beberapa metode statis untuk memfasilitasi kami untuk mengoperasikan instance pengumpulan, yang keduanya terletak di paket java.util .
2. Pertama perkenalkan dari antarmuka koleksi
Gambar berikut adalah tangkapan layar dari kode sumber antarmuka koleksi. Dari metode abstrak di antarmuka, kita dapat melihat bahwa itu mendefinisikan metode umum untuk koleksi umum:
- Tambahkan dan hapus elemen
- Tentukan apakah elemen itu ada
- Dapatkan ukuran koleksi
- ITerate Over a Collection
2.1 Antarmuka Daftar Koleksi
Antarmuka daftar mewarisi dari antarmuka koleksi. Karakteristiknya adalah bahwa objek di dalamnya dipesan dan setiap objek memiliki indeks yang unik. Kami dapat mencari elemen melalui indeks ini, dan objek dalam daftar diizinkan untuk diulang, yang mirip dengan array. Untuk antarmuka daftar, Java API menyediakan implementasi berikut:
- java.util.arraylist
- java.util.linkedlist
- java.util.vector
- java.util.stack
Tentu saja, ada beberapa implementasi dalam paket java.util.concurrent , yang akan dijelaskan secara rinci dalam artikel lain.
ArrayList adalah koleksi yang paling umum digunakan, dan implementasinya adalah array , dan ukuran arraylist dapat diperluas secara dinamis. Efisiensi akses acak untuk elemen tinggi, dan kompleksitas waktu akses adalah O(1) . Efisiensi operasi dari ekornya tinggi, dan kompleksitas waktu adalah O(1) seperti akses acak. Jika dioperasikan dari kepala, efisiensinya akan relatif rendah, karena ketika memasukkan atau menghapus dari kepala, semua elemen berikut perlu dipindahkan, dan kompleksitas waktu adalah O(ni) (n mewakili jumlah elemen, dan saya mewakili posisi elemen).
LinkList: Seperti yang dapat dilihat dari gambar di atas, tidak hanya mewarisi antarmuka List , tetapi juga mewarisi antarmuka Deque (itu akan diperkenalkan nanti). LinkList adalah struktur data berdasarkan daftar tertaut, dan setiap node menyimpan pointer ke node sebelumnya dan berikutnya. LinkList relatif tidak efisien untuk akses acak karena membutuhkan pengindeksan dari awal, sehingga kompleksitas waktunya adalah O(i) . Namun, untuk penambahan dan penghapusan elemen, LinkList efisien karena hanya pointer depan dan belakang yang perlu dimodifikasi, dan kompleksitas waktunya adalah O(1) .
Vektor: Dari tangkapan layar kode sumber vektor dan arraylist, mereka mewarisi antarmuka persis sama. Oleh karena itu, vektor dapat dianggap sebagai daftar array yang aman, yang juga diimplementasikan berdasarkan array , tetapi hampir semua operasi pengumpulan ditambahkan dengan kata kunci synchronized .
Tumpukan: Di atas adalah tangkapan layar dari kode sumber kelas tumpukan. Kami melihat bahwa kelas tumpukan sebenarnya mewarisi dari vektor. Stack hanya menambahkan beberapa metode berdasarkan vektor untuk memberikan karakteristik tumpukan (terakhir di First Out Lifo). Fitur Stack adalah bahwa ketika ditambahkan, elemen baru akan ditambahkan ke atas, dan ketika dihapus, elemen atas akan dihapus terlebih dahulu. Struktur data ini terutama digunakan sebagai beberapa proses pemrosesan data khusus, seperti kompilasi bahasa, parsing XML, dll.
2.2 Antarmuka Set Koleksi
Antarmuka set dan daftar juga diwarisi dari antarmuka Collection , dan juga merupakan implementasi koleksi. Perbedaan terbesar di antara mereka adalah bahwa objek yang ada di set tidak diperbolehkan diulang . Untuk antarmuka Set , Java API menyediakan implementasi berikut:
- java.util.enumset
- java.util.hashset
- java.util.linkedhashset
- java.util.treeset
Fungsi kelas -kelas ini sedikit berbeda, dan perbedaannya terutama tercermin dalam urutan iterasi objek dan efisiensi penyisipan dan pencarian.
Implementasi hashset sangat sederhana, dan merupakan HashMap di dalam, tetapi tidak menjamin urutan elemen.
Implementasi LinkedHashset juga sangat sederhana, dan menggunakan LinkedHashMap secara internal. Karena LinkedHashMap mempertahankan daftar ditautkan dua arah secara internal untuk mempertahankan ketertiban, karakteristik LinkedHashSet adalah bahwa elemen -elemen di dalamnya dipesan, dan urutan iterasi elemen adalah urutan penyisipan mereka. Reinsersi elemen tidak akan mempengaruhi urutan elemen asli.
Treeeset: Dari hubungan warisan pada gambar di atas, Anda harus terlebih dahulu memahami antarmuka NavigableSet TreeSet SortedSet .
Antarmuka SortedSet
Antarmuka Publik SortedSet <E> Memperluas set <e> {pembanding <? super e> pembanding (); Sortedset <E> subset (e fromelement, e Toelement); Sortedset <E> headset (e Toelement); Sortedset <e> tailset (e fromelement); E first (); } Dari definisi antarmuka di atas, antarmuka sortedset adalah subinterface dari set. Selain karakteristik himpunan umum, elemen -elemennya dipesan secara internal. Urutan elemen internal tergantung pada aturan pemesanan elemen, yaitu urutan elemen tergantung pada implementasi antarmuka elemen comparable atau comparator pembanding. Untuk perbedaan antara yang sebanding dan pembanding, silakan merujuk ke: https://www.vevb.com/article/93973.htm
Antarmuka navigableSet
Public Interface Navigableset <E> memperluas sortedset <E> {navigableset <E> descendingset (); Iterator <E> descendendingiterator (); Sortedset <E> headset (e Toelement); Sortedset <e> tailset (e fromelement); Sortedset <E> subset (e fromelement, e Toelement); Langit -langit (), lantai (), lebih tinggi (), dan lebih rendah () ...}Dari definisi antarmuka Navigableset, ini adalah subinterface dari SortedSet dan menyediakan beberapa metode navigasi. Adapun arti metode navigasi ini, Anda dapat memeriksa java doc.
Oleh karena itu, karakteristik Treeset adalah bahwa elemen internalnya dipesan dan ada banyak metode navigasi untuk diimplementasikan. Dari bagian pertama dari ikhtisar kelas koleksi Java, kami tahu bahwa set memiliki sub-antarmuka SortedSet , dan sortedset memiliki antarmuka NavigableSet sub-antarmuka. Java API hanya mengimplementasikan antarmuka SortedSet dan Navigableset, yang merupakan TreeSet .
2.3 Antarmuka Antrian Koleksi
Antarmuka antrian mewarisi dari antarmuka Collection , yang juga mewakili antrian yang dipesan. Namun, fitur terbesar dari antrian ini adalah bahwa elemen yang baru dimasukkan terletak di ekor antrian dan objek yang dilepas terletak di kepala antrian, yang mirip dengan antrian yang check out di supermarket.
Kita sudah tahu dari ikhtisar koleksi Java di bagian 1 bahwa antarmuka antrian juga memiliki deque sub-antarmuka. Mari kita lihat definisi kedua antarmuka ini oleh Java API:
Antarmuka antrian:
antrian antarmuka publik <e> memperluas koleksi <E> {boolean add (e e); Penawaran Boolean (E E); E hapus (); E Poll (); E peek ();}Antarmuka Deque:
deque antarmuka publik <e> memperluas antrian <e> {void addFirst (e e); membatalkan addlast (e e); E hapusfirst (); E hapusfirst ();}Dari definisi kedua antarmuka ini, saya pikir semua orang telah melihat beberapa petunjuk. Antarmuka antrian mendefinisikan metode operasi antrian umum, sedangkan deque adalah antrian ganda .
Untuk antarmuka Queue , Java API menyediakan dua implementasi:
- java.util.linkedlist (juga mengimplementasikan antarmuka deque)
- java.util.priorityqueue
LinkedList: Bab daftar sebelumnya telah menyebutkan bahwa itu adalah antrian standar.
PriityQueue: Urutan dalam antrian mirip dengan Treeset, tergantung pada aturan pemesanan elemen, yaitu, implementasi elemen ke antarmuka yang sebanding atau pembanding pembanding.
Untuk antarmuka Deque, ada implementasi lain selain kelas LinkList:
- java.util.arraydeque
ArrayDeque: Seperti yang dapat dilihat dari namanya, implementasinya adalah sebuah array.
3. Peta Koleksi Java
Dari bagian pertama ikhtisar kelas koleksi Java, kita tahu bahwa peta tidak mewarisi dari antarmuka koleksi, tetapi terletak pada posisi paralel dengan antarmuka koleksi. Oleh karena itu, perilaku peta sangat berbeda dari perilaku koleksi yang diperkenalkan di atas. Fitur utama peta adalah bahwa elemen yang disimpannya adalah pasangan key-value . Mari kita lihat definisi antarmuka peta:
peta antarmuka publik <k, v> {v put (key k, nilai v); Boolean berisiKey (kunci objek); Set <map.entry <k, v >> entryset (); int hashcode (); V dapatkan (kunci objek); Set <k> keyset (); ...}Untuk antarmuka peta, Java API menyediakan implementasi berikut:
- java.util.hashmap
- java.util.hashtable
- java.util.enummap
- java.util.identityhashmap
- java.util.linkedhashmap
- java.util.properties
- java.util.treemap
- java.util.weakhashmap
Di antara mereka, yang paling umum digunakan adalah hashmap dan treemap.
Kunci dan nilai dalam hashmap keduanya tidak teratur. Implementasi internal hashmap layak dipelajari. Untuk detailnya, silakan merujuk ke implementasi internal hashmap
Hashtable dapat dianggap sebagai implementasi hashmap kelas berat. Sebagian besar metode ditambahkan dengan kata kunci yang disinkronkan, yang aman. Perbedaan lain antara HashTable dan hashmap adalah bahwa key-value hashmap diizinkan menjadi nol, sedangkan HashTable不.
LinkedHashMap juga merupakan hashmap, tetapi daftar tertaut dua arah dipertahankan secara internal untuk mempertahankan pesanan. Implementasi internal LinkedHashSet digunakan untuk menggunakan LinkedHashMap.
Kunci dan nilai di TreeMap tidak hanya dapat menjaga ketertiban, tetapi juga mirip dengan TreeSet dan PriorityQueue . Urutan berulang kunci dan nilai di TreeMap tergantung pada aturan penyortiran masing -masing.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.