"Nah, bagaimana pemproses anda?"

"Tidak mengapa. Saya duduk dalam nitrogen cecair selama sejam, jadi sekarang saya baik seperti baru!"

"Hebat. Kalau begitu mari kita sambung."

"Tetapkan koleksi."

Dari segi matematik, set ialah sekumpulan elemen unik. Oleh itu, dalam pengaturcaraan, Set ialah koleksi elemen unik, iaitu koleksi yang tidak membenarkan anda menyimpan elemen yang sama.

"Saya tidak tahu sama ada Ellie menunjukkan kepada anda hierarki warisan Set. Jika tidak, inilah:"

Pelaksanaan antara muka Set dan Baris Gilir - 1

" HashSet ialah koleksi yang menyimpan elemen secara dalaman menggunakan nilai hash yang dikembalikan oleh kaedah hashCode ()."

"Untuk kesederhanaan, HashSet<E> menyimpan objek HashMap<E, Object> yang menyimpan nilai HashSet sebagai kunci."

"Wah!"

"Menggunakan kod cincang membolehkan anda mencari, menambah dan mengalih keluar elemen dengan cepat daripada Set."

"Tetapi perlu diingat bahawa kelas anda mesti melaksanakan kaedah hashCode & equals dengan betul untuk menambah objek kelas anda pada Set dan mencarinya di sana dengan betul."

"Kedua-dua kaedah banyak digunakan dalam HashSet/HashMap. "

"Jika anda terlupa untuk melaksanakan kaedah hashCode (), maka anda berisiko tidak dapat mencari objek anda dalam Set, walaupun ia ada."

"Ya, saya ingat, saya ingat. Awak beritahu saya tentang perkara ini tadi. Saya telah mendengar semua tentangnya."

"OK. Kemudian, inilah beberapa maklumat berguna untuk anda."

"Andaikan anda telah melaksanakan Kod hash dan sama dengan  betul dalam kelas anda, dan anda dengan senang hati menyimpan objek anda dalam Set."

"Tetapi kemudian anda pergi dan menukar salah satu objek, dan dengan berbuat demikian anda menukar data dalaman yang digunakan untuk mengira cincangnya . Jadi cincang objek berubah."

"Dan ini bermakna apabila anda mencarinya dalam Set, anda mungkin tidak akan menemuinya."

"Whoa! Bagaimana ia berfungsi?"

"Ini adalah perangkap yang terkenal apabila bekerja dengan cincang. Pada asasnya, carian HashSet (dan HashMap) hanya dijamin berfungsi dengan betul jika objek tidak boleh diubah ."

"Whoa! Dan apa, tiada siapa yang berbuat apa-apa mengenainya?"

"Semua orang berpura-pura bahawa masalah itu tidak wujud. Tetapi ini sering muncul dalam temu bual, jadi ia mungkin patut diingati…"

" LinkedHashSet ialah HashSet yang unsur-unsurnya juga disimpan dalam senarai terpaut. HashSet biasa tidak menyokong susunan elemen. Pertama, ia bukan operasi rasmi. Kedua, malah susunan dalaman boleh berubah dengan ketara apabila satu elemen ditambah."

Tetapi anda boleh mendapatkan iterator daripada LinkedHashSet dan menggunakannya untuk meneliti semua elemen dalam susunan ia telah ditambahkan pada LinkedHashSet . Ia tidak kerap berlaku, tetapi kadangkala ini sangat diperlukan."

"Saya faham. Saya suka apabila kelas wujud untuk senario «untuk berjaga-jaga» ini. Kes sebegini tidak begitu jarang berlaku."

" TreeSet ialah koleksi yang menyimpan elemen dalam bentuk pokok yang disusun mengikut nilai. TreeSet <E> mengandungi TreeMap <E, Object> yang menyimpan semua nilai ini. Dan TreeMap ini menggunakan pokok merah - hitam yang seimbang untuk menyimpan elemen . Akibatnya, ia menyokong operasi tambah, alih keluar dan mengandungi dengan sangat pantas."

"Ya, saya masih ingat. Kami membincangkannya baru-baru ini. Dan saya juga memikirkan di mana ini digunakan."

"Dan ternyata beberapa koleksi Java yang paling popular menggunakannya."

"Ya. By the way, penemuduga sering bertanya tentang TreeSet . Mereka biasanya cuba menipu anda. Mereka akan berkata, 'jika TreeSet menggunakan pokok binari, maka semua elemen boleh membentuk satu cabang panjang, jadi carian akan mengambil masa "Inilah masanya untuk meletakkan lelaki kurang ajar itu di tempatnya dengan menyatakan, "Seorang kanak-kanak pun tahu bahawa TreeSet dan TreeMap menggunakan pokok merah - hitam yang seimbang , jadi keadaan itu sebenarnya mustahil."

"Ah. Saya suka melihat wajah orang yang bertanya soalan itu. Saya mungkin menghafal frasa itu. …"

"Tetapi dalam amalan, Set ternyata tidak semudah yang saya fikirkan pada mulanya."

"Sebaliknya, situasi dengan Queue adalah lebih mudah:"

Pelaksanaan antara muka Set dan Baris Gilir - 2

" Baris gilir melaksanakan baris gilir. Elemen ditambah pada penghujung baris gilir dan diambil dari hadapan."

" PriorityQueue sebenarnya adalah satu-satunya pelaksanaan klasik antara muka Queue , tidak mengira LinkedList , yang secara teknikalnya juga merupakan baris gilir."

"Okey, saya semakin penat. Itu sahaja untuk hari ini. Sampai lain kali."