İlginizi Çekebilir
featured
  1. Ana Sayfa
  2. Java
  3. Java HashSet Nedir?

Java HashSet Nedir?

Bu rehber içeriğimizde Java Collections yapısının altında yer alan Set arayüzüne bağlı, karmaşık veri yapılarının depolamaları için kullanılan HashSet yapısını ele alacağız.

Oluşturacağımız bölümlerde Java HashSet Nedir, Özellikleri ve Kullanım yapısı gibi konuları ele alarak HashSet sınıf yapısını derinlemesine öğrenmeye çalışacağız. Eğer “collections” yapıları hakkında bir bilgi sahibi değilseniz konunun ilerleyen aşamalarında zorluklar çekebilirsiniz. Bunun için daha önce paylaşmış olduğum “Java Collections Framework Nedir” isimli içeriğime emrecelen.com.tr/java-collections-nedir/ bu adresi takip ederek ulaşabilirsiniz. Böylelikle HashSet sınıf yapısını daha rahat bir şekilde öğrenebilir ve kullanacağım terimleri anlayabilirsiniz. 🕵🏻🎓

Java HashSet Nedir?

Java HashSet, programlarımızda kullandığımız zaman bizler için depolama görevini üstlenen, karma tablo yapılarından oluşan ve bu tablo üzerinde verilerimizi unique yapıda hashcode değerler ile saklayan bir yapıdır.

Java HashSet Nedir
Java HashSet Yapısı

HashSet yapısı gereği girilen verileri düzensiz bir şekilde sıralamaya tabi tutar, böylelikle yapının performansını arttırır. Görsel üzerinde index bölümü oluşturmuş olmama rağmen HashSet yapıları verilerin index erişimine izin vermemektedir fakat yapı içerisinde bulunan ilk ve son elemana doğrudan erişim sağlayabiliriz.

Java HashSet Özellikleri

Teorik olarak tanıdığımız HashSet yapılarının özelliklerini aşağıda oluşturmuş olduğum maddeler üzerinden inceleyelim.

  • HashSet yapılarını oluşturduğumuz zaman varsayılan kapasitesi 16 olarak oluşur ve bu oluşan yapının yük faktörü 0,75 olur.
  • İçerisinde null veri saklamamıza izin verir.
  • Yapı içerisine eklediğimiz verileri hashing adı verilen bir mekanizma kullanarak depolar.
  • Senkronize bir yapısı bulunmaz.
  • İçerisine eklediğimiz veriler tamamen benzersiz yapıda olmak zorundadır.

Java HashSet Kullanımı

Java HashSet Kullanımı, collection framework yapısından dolayı tanımlama yaparken birden fazla constructor (kurucu) metot kullanımı ile farklı tanımlamalar oluşturularak kullanılır. (👷🏻🧰🛠) Fakat bu rehber içeriğimizde fazla karışıklık oluşmaması ve kolay bir şekilde konuyu anlayabilmek için bu kullanım şekillerinin bazılarına yer vereceğim.

İsterseniz hashset kullanımının klasik yapısının oluşum aşamalarını maddeler üzerinde aşama aşama inceleyerek yapımızı ele almaya başlayalım.

  1. Tanımlama işlemini gerçekleştireceğimiz sınıfımızın “hashset” kavramını tanıması için “HashSet” sınıf yapısını import ederek ilk adımızı atalım.
  2. import java.util.HashSet;

  3. Daha sonra klasik bir sınıf tanımlama işlemimizi gerçekleştirelim. Tabii, bu tanımlamada çeşitli constructor metotlardan faydalanabileceğimiz gibi generic veya non-generic şekillerde de tanımlama gerçekleştirebiliriz.
  4. Henüz, Non-Generic ve Generic kavramları hakkında bir fikriniz yoksa önceden konu ile alakalı oluşturmuş olduğum “Java Generic Nedir” ismindeki içeriğime emrecelen.com.tr/java-generic-nedir/ bu bağlantıyı takip ederek ulaşabilirsiniz.

    Yukarıda bahsetmiş olduğum için iki tanımlama şeklini de aşağıdaki kod bloğu içerisine ekledim.

    ///---> Non-Generic HashSet Tanımlaması <---\\\
    HashSet set = new HashSet();
    ///---> Generic HashSet Tanımlaması <---\\\
    HashSet <String> genericSet = new HashSet<>();

Uygulama yapacağımız sınıf üzerinde yukarıdaki tanımlamaları gerçekleştirdikten sonra bazı metot yapılarını kullanabilir hale geleceğiz. Bu metot yapılarının sahip olduğu özellikleri aşağıda bulunan bölümde inceleyeceğiz. 👨🏻‍🏫🔍👀

Java HashSet Metotları

Uygulamamızın sınıf yapısı ile HashSet sınıfını tanıştırdıktan sonra bazı özel fonksiyonları kullanabilir hale gelmiş olduk. Bu bahsettiğim özel fonksiyonlar bir collection yapısı olan “HashSet” sınıfının metotlarıdır. Bu metotlar şu şekildedir:

  • Add(Parametre): Parametre olarak girilen veri tipine ait öğeleri ekler. Fakat, parametre olarak girilen değer daha önce “HashSet” yapısında bulunuyorsa, o değeri tekrar eklemez.
  • Remove(Parametre): HashSet içerisinde parametre olarak aldığı veri bulunuyorsa o veriyi siler.
  • Clear(): Tanımlamış olduğumuz HashSet yapısı içerisinde bulunan bütün değerleri siler.
  • Clone(): HashSet yapımızın içerdiği değerlerle birlikte bir kopyasını oluşturur.
  • Size(): HashSet içerisinde bulunan öğe sayısını belirtir.
  • Contains(Parametre): Parametre olarak aldığı değeri küme içerisinde bulunuyorsa true, bulunmuyorsa false değerlerini döndürür.
  • IsEmpty(): HashSet içerisinde eleman içermediğini kontrol etmek için kullanılır. Eğer, küme yapımız boş ise true değerini döndürür.
  • Iterator(): Girmiş olduğumuz verilerin üzerinde bir tekrarlayıcı döndürmek için kullanılır.

Metot yapılarının isimlerini ve yaptığı işlemi teorik olarak öğrenmiş olduk. Gelin birde bu yapıları kod içerisinde nasıl kullanabileceğimizi göreceğimiz bir örnek oluşturalım.

Bu örnek için oluşturmuş olduğum kod yapımı aşağıda sizlerle paylaştım.

import java.util.HashSet;

public class Main {

    public static void main(String[] args) {
        ///---> Değişken Tanımlaması <---\\\
        String ayrac = new String(new char[15]).replace("\0","-");

        ///---> Non-Generic HashSet Tanımlaması Gerçekleştirelim <---\\\
        HashSet set = new HashSet();

        ///---> HashSet İçerisine Değerlerini Ekleyelim <---\\\
        set.add("String Bir Değer");
        set.add(42.58); //Double değer
        set.add(true);  //Boolean değer
        set.add(null);
        set.add(25); //Integer değer

        ///---> Metot Kullanımı & Konsol Çıktısı Alımı <---\\\

        System.out.println(ayrac+"\n< Java HashSet Metotları >\n"+ayrac);
        System.out.print("-> HashSet Öğeleri: ");
        set.forEach(item -> System.out.print("["+item+"]"));
        System.out.println("\n-> Öğe Sayısı (Size): "+ set.size()+"\n"+ayrac+"\n-> Remove('String Bir Değer') Kullanımı: "+ set.remove("String Bir Değer"));
        System.out.println("-> Size Kullanımı: "+set.size());
        set.clear();
        System.out.println("-> Clear Kullanımından Sonra isEmpty: "+ set.isEmpty()+"\n"+ayrac);

    }
}

Kod Çıktısı:

Java HashSet Sınıfı
Java HashSet Metotları

Java HashSet Örnekleri

HashSet yapısını daha iyi anlayabilmemiz ve geçmiş konuları aklımızda canlandırarak tekrar yapmak için güzel bir örnek oluşturmayı düşünüyorum.

Bu örnek üzerinde hayali bir firmanın çalışanlarının kaydının oluşturulması ve bu çalışanlara ait bilgilerin HashSet üzerinde tutulmasını işleyecek olalım. Bu senaryoyu takip ederken izlediğim aşamalar şu şekildedir:

  1. Öncelikle çalışan kişilerin kaydını oluşturabilmek için WorkerDetails isminde bir sınıf oluşturdum.
  2. Oluşturmuş olduğum bu sınıf içerisinde bir “Constructor” (Kurucu) metot sayesinde çalışan kişilerin kişisel bilgilerini alarak ilgili değişkenlere atadım.
  3. Bu atama işlemi bittikten sonra toString metotdunu override ederek içerisine yeni bir yapı yazdım. Bu sayede istediğim şekilde çalışan kişilerin bilgilerini yazdırabilir hale geldim.
  4. Bu üç temel aşamadan sonra WorkerDetails ismindeki sınıf yapım aşağıdaki halini almış oldu.

    public class WorkerDetails {
        private String workerName,workerSurname,workerJob;
        private double workerMoney;
        private int workerNo,workerOffDay;
    
        public WorkerDetails(int workerNo,String workerName, String workerSurname, String workerJob, double workerMoney){
            this.workerNo = workerNo;
            this.workerName = workerName;
            this.workerSurname = workerSurname;
            this.workerJob = workerJob;
            this.workerMoney = workerMoney;
            if(workerJob != null) {
                if (workerJob.contains("Mühendis"))
                    workerOffDay = 30;
                else
                    workerOffDay = 14;
            }
            else
                workerOffDay = 0;
        }
        public String toString(){
            return "["+workerNo+"]\t\t\t"+workerName+"\t\t\t"+workerSurname+"\t\t\t"+workerJob+"\t\t\t"+workerMoney+" TL\t\t\t"+workerOffDay+" Gün";
        }
    }
    
  5. Daha sonra “Main” sınıfımın içerisine girerek oluşturmuş olduğum “WorkerDetails” ismindeki sınıf yapımı kullanarak çalışan bilgileri ekledim.
  6. Eklediğim verileri HashSet üzerinde tutabilmek için HashSet tanımlamasını da gerçekleştirdim.
  7. Son olarak eklemiş olduğum verilerin üzerinde gezinerek ekrana bu bilgileri yazdırmak istediğim için iterator metodu kullanarak ekrana yazdırma işleminin temelini attım.
  8. Bu işlemler sonucunda “Main” sınıf yapım da aşağıdaki halini almış oldu.

    import java.util.HashSet;
    import java.util.Iterator;
    
    public class Main {
    
        public static void main(String[] args) {
            ///---> Çalışan Eklemesi Gerçekleştirelim <---\\\
            WorkerDetails metehan = new WorkerDetails(666,"Metehan","Durmuş","Mühendis",6000);
            WorkerDetails kerem = new WorkerDetails(473,"Kerem","Seven","Reklamcı",5000);
            WorkerDetails oktay = new WorkerDetails(984,"Oktay","Güden","Grafiker",4800);
            WorkerDetails sait = new WorkerDetails(482,"Sait","Öztaş","Mühendis",5800);
    
            ///---> HashSet Oluşturup Çalışanları Ekleyelim <---\\\
            HashSet<WorkerDetails> set = new HashSet<>();
            set.add(metehan);
            set.add(kerem);
            set.add(oktay);
            set.add(sait);
    
            Iterator itr = set.iterator(); // HashSet yapımızın içerisinde dolaşmak için oluşturduk.
            System.out.println("[Çalışan No]\t[Adı]\t\t\t[Soyadı]\t\t[Mesleği]\t\t\t[Maaşı]\t\t\t\t[İzin Günü]");
            while (itr.hasNext()){
                System.out.println(itr.next());
            }
        }
    }
    

Kod Çıktısı:

Java HashSet Kullanımı
Java HashSet Örnekleri

Java HashSet Nedir” sorusuna benimle birlikte cevap aradığınız ve bu rehber içeriğin sonuna kadar beni yalnız bırakmadığınız için teşekkür ederim (🙏🏻). Eğer, konuya devam etmek ve “HashSet” hakkında farklı kaynaklardan bilgi almak isterseniz sizlere Oracle tarafından hazırlanmış rehber içerikleri tavsiye ederim. Bahsetmiş olduğum rehber içeriğine buraya tıklayarak ulaşabilirsiniz.

Unutmayın, aklınıza takılan herhangi bir soru ya da konu işleyişi ile ilgili önerilerinizi aşağıda bulunan yorum yap kısmından bana iletebilirsiniz. 👋🏻

Yorum Yap

Yazar Hakkında

Yazmayı, öğrenmeyi, öğrendiklerini paylaşmayı , kodlamayı ve günün birinde Yönetim Bilişim Sistemleri Uzmanı olmanın hayalini kuran birisiyim.

Yorum Yap