Java 10 HashSet, LinkedHashSet, TreeSet

HashSet    

HashSet extends AbstractSet implements Set Interface extends Collection extends Iterable

  1. HashSet elementleri “hashing” yani hash table  mekanizmasına uygun bir biçimde depolarlar
  2. HashSet bir element’i sadece bir defa depolar.(Set Interface)
  3. Elementlerin ekleme sırasına göre depolamaz.

LinkedHashSet

LinkedHashSet extends HashSet extends AbstractSet implements Set Interface extends Collection extends Iterable

  1. LinkedHashSet hem HashTable hem de Set Interface’in LinkedList implementasyonu gibi davranır.
  2. HashSette olduğu gibi bir elementi sadece bir defa depolar.(Set Interface)
  3. Elementleri ekleme sırasına göre depolar.

TreeSet

TreeSet sınıfı NavigableSet inteface’ini implemente eder ve AbstractSet sınıfından miras alır. NavigableSet interface’i de SortedSet interfaceinden miras alır.

  1. Elementleri depolamak için Tree yani Ağaç yapısını kullanır.
  2. Elementleri alfabetik olarak sıralarlar.

    HashSet vs LinkedHashSet vs TreeSet

   HashSet, Hash Table mekanizmasını uyguladığı için elementler sıralı değildir. Ekleme,Çıkarma ve Arama metodları sabit zamanda( Time Complexity : O(1) ) çalışır.

TreeSet, elementleri tree yapısına yani ağaç yapısına uygun depolar. Ekleme,Çıkarma ve Arama metodları O(log(n)) complexitysi ile çalışır.

LinkedHashSet sınıfı hashtable ile linked list yapısını kullanarak elementleri depolar.Bu yüzden, elemetler ekleme sırasına göre depolanır. Ekleme,Çıkarma ve Arama metodları sabit zamanda( Time Complexity : O(1) ) çalışır.

Ekran Çıktısı

HashSet ile bellekte sıralı birşekilde depolanmadığı için rastgele olarak bastırmıştır. LinkedHashSet ile ekleme sırasına göre ekrana basılmıştır. TreeSet ile bellekte alfabetik olarak sıralandığından ekranada alfabetik olarak ekrana basılmıştır.
set3.add(“Php”);
bu elemanı bir defa daha ekleyemiyorum çünkü HashSet, LinkedHashSet ve TreeSet sadece bir defa bu elementten belleklerinde barındırabilmektedir. İkinicisine izin vermiyor.

Eleman çıkarma;

İki Küme Arasından bir kümede olan fakat diğer kümede olmayanları bulma;

Ekran Çıktısı

İki Küme Arasındanki aynı elemanları ekrana yazdırma;

Ekran Çıktısı
  • Sıralı değerler için TreeSet > LinkedHashSet > HashSet
  • Sıralı değerler değil ise HashSet > LinkedHashSet > TreeSet

HashSet ile aynı değeri bir defa daha depolayamayız.

Fakat biz kendi oluşturduğumuz class’tan aynı objeler oluşturduğumuzda ve HashSet’e eklediğimizde aşağıdaki ekran çıktısında olduğu gibi bu nesneler aynı hash pack’tine düşmediğinden objeleri farklı obje olarak görüyor ve bu objeler ekrana basılmış oluyor.

Ekran Çıktısı

Bunun önüne geçmek için hashCode ve Equals metodlarını classımıza Override etmemiz gerekiyor.

 

Metodlar override edildikten sonraki Ekran Çıktısı

49 Kez Okundu

Leave a Reply

Your email address will not be published. Required fields are marked *

Neon Light Text Effect