23 Aralık 2020

Java Collections / Set Interface

ile gökhan

Set interfacesi ile Java’da yinelenen girişler engellenir. Tüm set interface implementasyonlarının ortak noktası kopyalara izin vermemeleridir. HashSet ve TreeSet adında iki tür set interface implementasyonundan bahsedeceğiz.

HashSet, öğelerini bir hash tablosunda saklar. Bu tabloda her bir ögenin bir hash kodu içeren anahtarı vardır. HashSet’te bir öge eklediğimizde sırayı kaybederiz. Bu yüzden HashSet’lerde sıranın önemli olduğu işlemler yapılmaz. Amaç, hashset’e öge eklemek ya da bir ögenin hashset’te olup olmadığını anlamaktır. Aşağıdaki örnekte olduğu gibi tekrarlı verilere izin verilmedi, karışık bir şekilde çıktı üretti;

Set<Integer> eleman = new HashSet<>();
       boolean x = eleman.add(32); //true
       boolean y = eleman.add(4);  //true
       boolean z = eleman.add(32); //false
       boolean k = eleman.add(3);  //true
       eleman.forEach(s-> System.out.println(s));  //32,3,4

TreeSet, öğelerini sıralanmış bir ağaç yapısında saklar. En önemli özelliği her zaman sıralı düzende olmasıdır. Dezavantajı, ağaç büyüdükçe, bir öğenin var olup olmadığının kontrol edilmesi ve öge eklenmesi HashSet’e göre daha uzun sürmesidir. Aşağıdaki TreeSet örneğinde görüldüğü gibi tekrarlı elemanlara izin verilmiyor ve çıktı sıralı olarak gösteriliyor.

Set<Integer> eleman = new TreeSet<>();
       boolean a = eleman.add(71); //true
       boolean b = eleman.add(11); //true
       boolean c  =eleman.add(71); //false
       boolean k = eleman.add(4); //true
       eleman.forEach(s->System.out.println(s)); //4,11,71