"Peki, işlemcin nasıl?"
"Sorun değil. Bir saat sıvı nitrojen içinde oturdum, yani şimdi yeni gibiyim!"
"Harika. O zaman devam edelim."
"Koleksiyonları ayarla."
Matematiksel olarak konuşursak, bir küme benzersiz öğeler grubudur. Bu nedenle, programlamada bir Küme, benzersiz öğelerden oluşan bir koleksiyondur, yani aynı öğeleri depolamanıza izin vermeyen bir koleksiyondur.
"Ellie, Set'in miras hiyerarşisini sana gösterdi mi bilmiyorum. Göstermediyse, işte burada:"
"Bir HashSet, hashCode () yöntemi tarafından döndürülen karma değerleri kullanarak öğeleri dahili olarak depolayan bir koleksiyondur ."
"Basit olması için HashSet<E>, HashSet'in değerlerini anahtarlar olarak depolayan bir HashMap<E, Object> nesnesini depolar."
"Vay!"
"Karma kodlarını kullanmak, Kümedeki öğeleri hızlı bir şekilde aramanıza, eklemenize ve çıkarmanıza olanak tanır."
"Ancak , sınıflarınızın nesnelerini bir Set'e eklemek ve onları orada doğru bir şekilde bulmak için sınıfınızın hashCode & equals yöntemlerini düzgün bir şekilde uygulaması gerektiğini unutmayın ."
"Her iki yöntem de HashSet/HashMap içinde çokça kullanılıyor . "
" hashCode () yöntemini uygulamayı unutursanız , nesneniz mevcut olsa bile Set'te bulamama riskini alırsınız."
"Evet, hatırlıyorum, hatırlıyorum. Bana bundan daha önce bahsetmiştin. Hepsini duydum."
"Tamam. O zaman işte sana bazı yararlı bilgiler."
" Sınıfınızda hashCode ve equals'ı doğru bir şekilde uyguladığınızı ve nesnelerinizi mutlu bir şekilde bir Kümede sakladığınızı varsayalım ."
"Ama sonra gidip nesnelerden birini değiştiriyorsunuz ve böylece hash'ini hesaplamak için kullanılan dahili verileri değiştiriyorsunuz . Böylece nesnenin hash'i değişiyor."
"Ve bu, onu Set'te aradığınızda muhtemelen bulamayacağınız anlamına gelir."
"Vay! Bu nasıl çalışıyor?"
"Bu, hash'lerle çalışırken iyi bilinen bir tuzaktır. Esasen, HashSet (ve HashMap) aramalarının düzgün çalışması yalnızca nesneler sabit olduğunda garanti edilir . "
"Vay! Ve ne, kimse bu konuda bir şey yapmıyor mu?"
"Herkes sorun yokmuş gibi davranıyor. Ama bu röportajlarda sık sık gündeme geliyor, bu yüzden hatırlamakta fayda olabilir..."
"Bir LinkedHashSet, öğeleri de bağlantılı bir listede saklanan bir HashSet'tir. Normal HashSet'ler, öğelerin sıralanmasını desteklemez. İlk olarak, bu resmi bir işlem değildir. İkincisi, dahili sıra bile tek bir listede önemli ölçüde değişebilir. eleman eklendi."
Ancak bir LinkedHashSet'ten bir yineleyici alabilir ve onu, tüm öğeleri LinkedHashSet'e eklendikleri sırayla gözden geçirmek için kullanabilirsiniz . Sık sık olmaz, ancak bazen buna çok ihtiyaç duyulur."
"Anlıyorum. Bu 'her ihtimale karşı' senaryolar için sınıfların var olmasına bayılıyorum. Bu tür durumlar o kadar da nadir değildir."
" TreeSet, öğeleri değerlere göre sıralanmış bir ağaç biçiminde depolayan bir koleksiyondur. Bir TreeSet <E> , tüm bu değerleri depolayan bir TreeMap <E, Object> içerir. Ve bu TreeMap , depolamak için dengeli bir kırmızı -siyah ağaç kullanır. Sonuç olarak, çok hızlı ekleme, kaldırma işlemlerini destekler ve içerir."
"Evet, hatırlıyorum. Bunu daha yeni tartışmıştık. Ayrıca bunun nerede kullanıldığını da düşündüm."
"Ve Java'nın en popüler koleksiyonlarından bazılarının onu kullandığı ortaya çıktı."
"Evet. Bu arada, görüşmeciler sık sık TreeSet hakkında sorular soruyorlar. Genellikle sizi kandırmaya çalışıyorlar. 'Eğer bir TreeSet ikili ağaç kullanıyorsa, o zaman tüm öğeler tek bir uzun dal oluşturabilir, bu nedenle aramalar uzun sürer' derler. "Bu, "TreeSet ve TreeMap'in dengeli kırmızı -siyah ağaçlar kullandığını bir çocuk bile biliyor, bu yüzden bu durum aslında imkansız" diyerek küstah arkadaşı yerine koymanın tam zamanı.
"Ah. Bu soruyu soran kişinin yüzünü görmeyi çok isterim. Hatta bu cümleyi ezberleyebilirim..."
"Ancak pratikte, Set'in başlangıçta düşündüğüm kadar basit olmadığı ortaya çıktı."
"Öte yandan, Queue ile durum çok daha basit:"
" Kuyruk bir sıra uygular. Öğeler sıranın sonuna eklenir ve önden alınır."
" PriorityQueue aslında Queue arayüzünün tek klasik uygulamasıdır , teknik olarak aynı zamanda bir kuyruk olan LinkedList'i saymaz ."
"Tamam, yoruluyorum. Bugünlük bu kadar. Bir dahaki sefere kadar."
GO TO FULL VERSION