"Well, kamusta ang processor mo?"

"OK lang. Isang oras akong nakaupo sa liquid nitrogen, kaya ngayon ay parang bago na ako!"

"Great. Then let's continue."

"Magtakda ng mga koleksyon."

Sa matematika, ang isang set ay isang pangkat ng mga natatanging elemento. Kaya, sa programming, ang isang Set ay isang koleksyon ng mga natatanging elemento, ibig sabihin, isang koleksyon na hindi nagpapahintulot sa iyo na mag-imbak ng magkatulad na mga elemento.

"Hindi ko alam kung ipinakita sa iyo ni Ellie ang inheritance hierarchy ni Set. Kung hindi, narito:"

Pagpapatupad ng Set at Queue na mga interface - 1

"Ang HashSet ay isang koleksyon na nag-iimbak ng mga elemento sa loob gamit ang mga hash value na ibinalik ng hashCode () na paraan."

"Para sa pagiging simple, ang HashSet<E> ay nag-iimbak ng isang HashMap<E, Object> na bagay na nag-iimbak ng mga halaga ng HashSet bilang mga susi."

"Whoa!"

"Ang paggamit ng mga hash code ay nagbibigay-daan sa iyong mabilis na maghanap, magdagdag, at mag-alis ng mga elemento mula sa Set."

"Ngunit tandaan na ang iyong klase ay dapat na maayos na ipatupad ang hashCode & equals na mga pamamaraan upang magdagdag ng mga bagay ng iyong mga klase sa isang Set, at para mahanap ang mga ito doon nang tama."

"Ang parehong mga pamamaraan ay madalas na ginagamit sa loob ng HashSet/HashMap. "

"Kung nakalimutan mong ipatupad ang hashCode () na paraan, nanganganib na hindi mo mahanap ang iyong bagay sa Set, kahit na naroroon ito."

"Oo, naalala ko, naalala ko. Sinabi mo sa akin ang tungkol dito. Narinig ko na ang lahat."

"OK. Kung gayon, narito ang ilang mas kapaki-pakinabang na impormasyon para sa iyo."

"Ipagpalagay na tama mong ipinatupad ang hashCode at katumbas  sa iyong klase, at masaya mong iniimbak ang iyong mga bagay sa isang Set."

"Ngunit pagkatapos ay pumunta ka at palitan ang isa sa mga bagay, at sa paggawa nito ay binago mo ang panloob na data na ginamit upang kalkulahin ang hash nito . Kaya't ang hash ng object ay nagbabago."

"At nangangahulugan ito na kapag hinanap mo ito sa Set, malamang na hindi mo ito mahahanap."

"Whoa! Paano gumagana iyon?"

"Ito ay isang kilalang pitfall kapag nagtatrabaho sa mga hash. Sa pangkalahatan, ang mga paghahanap sa HashSet (at HashMap) ay ginagarantiyahan lamang na gagana nang maayos kung ang mga bagay ay hindi nababago ."

"Whoa! At ano, walang gumagawa nito?"

"Ang lahat ay nagpapanggap na ang problema ay hindi umiiral. Ngunit ito ay madalas na lumalabas sa mga panayam, kaya maaaring ito ay nagkakahalaga ng pag-alala..."

"Ang LinkedHashSet ay isang HashSet na ang mga elemento ay naka-imbak din sa isang naka-link na listahan. Ang mga normal na HashSet ay hindi sumusuporta sa pag-order ng mga elemento. Una, ito ay hindi isang opisyal na operasyon. Pangalawa, kahit na ang panloob na pagkakasunud-sunod ay maaaring magbago nang malaki kapag ang isang solong idinagdag ang elemento."

Ngunit maaari kang makakuha ng isang iterator mula sa isang LinkedHashSet at gamitin ito upang suriin ang lahat ng mga elemento sa pagkakasunud-sunod na idinagdag sa LinkedHashSet . Hindi ito madalas mangyari, ngunit kung minsan ito ay lubhang kailangan."

"I see. I love when classes exists for these «just in case» scenario. Ang mga ganitong kaso ay hindi gaanong bihira."

" Ang TreeSet ay isang koleksyon na nag-iimbak ng mga elemento sa anyo ng isang puno na inayos ayon sa mga halaga. Ang isang TreeSet <E> ay naglalaman ng isang TreeMap <E, Object> na nag-iimbak ng lahat ng mga halagang ito. At ang TreeMap na ito ay gumagamit ng balanseng pula -itim na puno upang mag-imbak mga elemento . Bilang resulta, sinusuportahan nito ang napakabilis na pagdaragdag, pag-alis, at naglalaman ng mga operasyon."

"Yes, I remember. We discussed that just recently. At naisip ko rin kung saan ito ginagamit."

"At lumalabas na ginagamit ito ng ilan sa mga pinakasikat na koleksyon ng Java."

"Oo. Siyanga pala, madalas na nagtatanong ang mga tagapanayam tungkol sa TreeSet . Karaniwang sinusubukan ka nilang linlangin. Sasabihin nila, 'kung ang isang TreeSet ay gumagamit ng isang binary tree, kung gayon ang lahat ng mga elemento ay maaaring bumuo ng isang mahabang sangay, kaya ang mga paghahanap ay kukuha ng isang "Ito na lang ang oras para ilagay ang walang pakundangan na tao sa kanyang lugar sa pamamagitan ng pagsasabing, "Kahit isang bata alam na ang TreeSet at TreeMap ay gumagamit ng balanseng pula-itim na mga puno , kaya talagang imposible ang sitwasyong iyon."

"Ah. Gusto kong makita ang mukha ng taong nagtanong niyan. Baka kabisado ko pa ang pariralang iyon. ..."

"Ngunit sa pagsasanay, ang Set ay naging hindi kasing simple ng una kong naisip."

"Sa kabilang banda, ang sitwasyon sa Queue ay mas simple:"

Pagpapatupad ng Set at Queue na mga interface - 2

" Ang Queue ay nagpapatupad ng pila. Ang mga elemento ay idinaragdag sa dulo ng pila at kinuha mula sa harapan."

" Ang PriorityQueue ay talagang ang tanging klasikong pagpapatupad ng interface ng Queue , hindi binibilang ang LinkedList , na sa teknikal ay isang queue din."

"Okay, I'm getting tired. That's all for today. Hanggang sa susunod."