1. Bekas dan koleksi

Bekas atau koleksi ialah kelas yang membolehkan anda menyimpan dan memproses beberapa objek sekaligus. Anda sudah mengetahui dua jenis bekas: tatasusunan dan senarai.

Java mempunyai beberapa dozen koleksi, setiap satunya menyimpan elemen dengan cara tersendiri. Berikut adalah beberapa daripadanya:

Koleksi Kelas Penerangan
List
ArrayList
Senaraikan
LinkedList
Senarai terpaut
Vector
vektor
Stack
Timbunan
Set
HashSet
Tetapkan
TreeSet
LinkedHashSet
Queue
PriorityQueue
Beratur
ArrayQueue
Map
HashMap
Peta/Kamus
TreeMap
HashTable

Nama-nama agak samar-samar di sini. Dalam kebanyakan bahasa pengaturcaraan, semua struktur data ini dipanggil koleksi, tetapi tidak dalam Java. Di Java, beberapa kelas ini melaksanakan Collectionantara muka, manakala yang lain tidak.

Sehubungan itu, koleksi dibahagikan kepada koleksi dalam erti kata luas dan koleksi dalam erti kata sempit (hanya yang melaksanakan Collectionantara muka).

Jadi untuk mengelakkan kekeliruan, apabila kita bercakap tentang koleksi yang kita maksudkan dalam erti kata yang sempit, iaitu kelas yang melaksanakan Collectionantara muka. , Listdan Setjenis Queueadalah semua koleksi. Koleksi dalam erti kata luas biasanya dipanggil bekas . Ini termasuk jenis seperti Mapdan tatasusunan.


2. HashSetkoleksi

Kelas HashSetadalah koleksi set biasa. Dalam banyak cara, ia serupa dengan ArrayListkelas. Dalam beberapa cara, ia adalah versi yang lebih primitif.

Anda boleh membuat HashSetobjek menggunakan pernyataan seperti:

HashSet<Type> name = new HashSet<Type>();

Di manakah Typejenis elemen yang akan kami simpan dalam HashSetkoleksi.

Kelas HashSetmempunyai kaedah seperti ini:

Kaedah Penerangan
void add(Type value)
Menambah valueelemen pada koleksi
boolean remove(Type value)
Mengalih keluar valueelemen daripada koleksi.
Mengembalikan truejika terdapat elemen sedemikian
boolean contains(Type value)
Menyemak sama ada koleksi mempunyai valueelemen
void clear()
Membersihkan koleksi, mengalih keluar semua elemen
int size()
Mengembalikan bilangan elemen dalam koleksi

Berikut ialah contoh penggunaan set.

Mari tulis program yang mengucapkan selamat tinggal kepada pengguna jika dia bertanya khabar. Untuk menjadikannya lebih menarik, kami akan memberikan program kami keupayaan untuk memahami "hello" dalam beberapa bahasa.

Kod Catatan
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
Buat HashSetobjek yang menyimpan Stringelemen.


Kami menambah ucapan dalam pelbagai bahasa kepada setpembolehubah.




Baca baris dari konsol.


Jika rentetan dalam set ucapan kita, maka kita mengucapkan selamat tinggal.


3. Tetapkan

Koleksi ini Setdireka untuk memegang satu set elemen. Itulah sebabnya ia dipanggil Set(set). Koleksi ini mempunyai tiga ciri.

Operasi pada set

Terdapat hanya tiga perkara yang boleh anda lakukan dengan set: tambah elemen pada set, alih keluar elemen daripada set dan semak sama ada set mengandungi elemen tertentu. Itu sahaja.

Tiada pesanan

Elemen dalam koleksi ini tidak mempunyai indeks. Anda tidak boleh mendapatkan elemen mengikut indeks, atau menulis nilai pada koleksi pada indeks tertentu. Satu set mempunyai tiada get()dan set()kaedah.

Unsur unik

Semua elemen dalam satu set adalah unik. Tidak seperti senarai, set boleh mengandungi hanya satu contoh elemen. Objek sama ada dalam set atau tidak — tiada pilihan ketiga. Anda tidak boleh menambah hitam tiga kali pada set warna. Ia ada atau tidak.

Mencari elemen

Apabila anda menambah elemen baharu, alih keluar elemen atau semak sama ada unsur wujud dalam set, carian untuk elemen dilakukan dalam kaedah tersebut. Elemen yang diluluskan dibandingkan dengan elemen koleksi dahulu dengan hashCode(), dan kemudian jika nilai dikembalikan mengikut hashCode()padanan, oleh equals().



4. Membandingkan koleksi: ListvsSet

Mari kita bandingkan dua jenis koleksi: Listdan SetKami akan melihat perbezaan utama, apabila satu lebih berfaedah daripada yang lain, dan sebaliknya.

Mari cuba bandingkan Senarai dan Set menggunakan mainan sebagai contoh.

ListKoleksi (senarai) itu seperti satu set mainan yang disusun di sepanjang dinding di dalam bilik permainan. Anda boleh menambah mainan pada penghujung senarai. Jika anda benar-benar perlu, anda juga boleh memasukkannya di tengah (tetapi beberapa mainan sedia ada perlu dialihkan).

Setiap mainan mempunyai indeks. Anda boleh merujuk mainan mengikut indeksnya dan juga menggantikan nombor mainan 7 dengan nombor mainan 13. Anda boleh mengeluarkan nombor mainan 4 daripada senarai. Akhir sekali, anda boleh mempelajari indeks setiap mainan dalam senarai.

Koleksi Set(set) lebih seperti timbunan mainan di tengah lantai. Anda boleh menambah mainan pada longgokan, dan anda boleh mengeluarkan mainan daripada longgokan. Tetapi mainan ini tidak mempunyai indeks tetap yang dikaitkan dengannya.

Atau katakan anda memilih mainan untuk hari lahir anak anda. Pertama, anda fikirkan sama ada dia sudah mempunyai mainan itu. Semua mainan yang dia sudah ada membentuk satu set mainan yang anda tidak akan memilih untuk membeli.

Dari sudut pandangan ini, anda dapat melihat bahawa susunan mainan dalam satu set "mainan yang sudah wujud" tidak penting, dan juga tidak penting jika anak lelaki hari jadi mempunyai dua contoh mainan tertentu. Anda tidak berminat dengan susunan atau nombor setiap mainan. Perkara yang anda pentingkan ialah mengetahui setiap mainan unik yang wujud dalam set.

Untuk kes seperti ini, anda memerlukan Setkoleksi. Pelaksanaannya yang paling popular ialah HashSetkelas.