{"id":34297,"date":"2025-11-14T13:41:27","date_gmt":"2025-11-14T10:41:27","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34297"},"modified":"2025-11-14T13:41:27","modified_gmt":"2025-11-14T10:41:27","slug":"java-set-javada-kume-yapisi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/","title":{"rendered":"Java Set \u2013 Java&#8217;da K\u00fcme Yap\u0131s\u0131"},"content":{"rendered":"<p><body><\/p>\n<h2>Java Set \u2013 Java&#8217;da K\u00fcme Yap\u0131s\u0131<\/h2>\n<p>Java Collections Framework&#8217;\u00fcn \u00f6nemli bir par\u00e7as\u0131 olan <code>Set<\/code> aray\u00fcz\u00fc, programlama d\u00fcnyas\u0131nda benzersiz elemanlar\u0131 depolamak i\u00e7in kullan\u0131lan temel bir veri yap\u0131s\u0131d\u0131r. Matematikteki k\u00fcme (set) kavram\u0131ndan esinlenerek tasarlanm\u0131\u015ft\u0131r ve eleman tekrar\u0131na izin vermemesiyle \u00f6ne \u00e7\u0131kar. Bu rehberde, Java&#8217;daki <code>Set<\/code> aray\u00fcz\u00fcn\u00fc, onun \u00e7e\u015fitli uygulamalar\u0131n\u0131 (<code>HashSet<\/code>, <code>LinkedHashSet<\/code>, <code>TreeSet<\/code>), temel \u00f6zelliklerini, kullan\u0131m senaryolar\u0131n\u0131 ve performans ipu\u00e7lar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h2>Set Aray\u00fcz\u00fc Nedir?<\/h2>\n<p><code>java.util.Set<\/code>, Java Collections Framework&#8217;\u00fcn bir par\u00e7as\u0131 olan ve <code>java.util.Collection<\/code> aray\u00fcz\u00fcn\u00fc geni\u015fleten bir aray\u00fczd\u00fcr. Temel \u00f6zelli\u011fi, <strong>yinelenen elemanlara izin vermemesidir<\/strong>. Bir <code>Set<\/code>&#8216;e ayn\u0131 eleman\u0131 birden fazla eklemeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda, bu i\u015flem ba\u015far\u0131s\u0131z olur ve <code>Set<\/code>&#8216;in i\u00e7eri\u011fi de\u011fi\u015fmez. Bu \u00f6zellik, \u00f6zellikle benzersiz de\u011ferler listesine ihtiya\u00e7 duyuldu\u011funda veya bir veri k\u00fcmesinden yinelenenleri temizlemek istendi\u011finde son derece kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h3>Temel \u00d6zellikler<\/h3>\n<ul>\n<li><strong>Benzersizlik:<\/strong> Bir <code>Set<\/code> i\u00e7inde her eleman yaln\u0131zca bir kez bulunabilir. Ayn\u0131 eleman\u0131 tekrar ekleme giri\u015fimi g\u00f6z ard\u0131 edilir.<\/li>\n<li><strong>S\u0131ras\u0131zl\u0131k (Genellikle):<\/strong> <code>Set<\/code> aray\u00fcz\u00fc, elemanlar\u0131n depolanma s\u0131ras\u0131 hakk\u0131nda herhangi bir garanti vermez. Ancak, <code>LinkedHashSet<\/code> gibi baz\u0131 uygulamalar ekleme s\u0131ras\u0131n\u0131 korurken, <code>TreeSet<\/code> gibi di\u011ferleri elemanlar\u0131 do\u011fal s\u0131ralar\u0131na g\u00f6re veya \u00f6zel bir kar\u015f\u0131la\u015ft\u0131r\u0131c\u0131ya g\u00f6re s\u0131ralar.<\/li>\n<li><strong>Null Eleman:<\/strong> \u00c7o\u011fu <code>Set<\/code> uygulamas\u0131 (<code>HashSet<\/code>, <code>LinkedHashSet<\/code>) bir adet <code>null<\/code> eleman\u0131 depolayabilir. <code>TreeSet<\/code> ise do\u011fal s\u0131ralama veya kullan\u0131lan <code>Comparator<\/code> null elemanlar\u0131 desteklemiyorsa <code>NullPointerException<\/code> f\u0131rlatabilir.<\/li>\n<li><strong>Thread-Safe De\u011fildir:<\/strong> Varsay\u0131lan <code>Set<\/code> uygulamalar\u0131 thread-safe de\u011fildir. \u00c7oklu i\u015f par\u00e7ac\u0131kl\u0131 ortamlarda kullan\u0131ld\u0131\u011f\u0131nda d\u0131\u015far\u0131dan senkronizasyon mekanizmalar\u0131 (\u00f6rn. <code>Collections.synchronizedSet()<\/code>) veya <code>CopyOnWriteArraySet<\/code> gibi thread-safe alternatifler kullan\u0131lmal\u0131d\u0131r.<\/li>\n<\/ul>\n<h3>Set Aray\u00fcz\u00fcn\u00fcn Metotlar\u0131<\/h3>\n<p><code>Set<\/code> aray\u00fcz\u00fc, <code>Collection<\/code> aray\u00fcz\u00fcnden miras ald\u0131\u011f\u0131 metotlar\u0131n yan\u0131 s\u0131ra, benzersizlik \u00f6zelli\u011fini destekleyen baz\u0131 ek davran\u0131\u015flar sunar. \u0130\u015fte baz\u0131 temel metotlar:<\/p>\n<ul>\n<li><code>boolean add(E e)<\/code>: Belirtilen eleman\u0131 k\u00fcmeye ekler. E\u011fer eleman zaten k\u00fcmede varsa <code>false<\/code> d\u00f6ner, aksi takdirde <code>true<\/code> d\u00f6ner.<\/li>\n<li><code>boolean remove(Object o)<\/code>: Belirtilen eleman\u0131 k\u00fcmeden kald\u0131r\u0131r. E\u011fer eleman k\u00fcmede varsa <code>true<\/code> d\u00f6ner, aksi takdirde <code>false<\/code> d\u00f6ner.<\/li>\n<li><code>boolean contains(Object o)<\/code>: K\u00fcmenin belirtilen eleman\u0131 i\u00e7erip i\u00e7ermedi\u011fini kontrol eder.<\/li>\n<li><code>int size()<\/code>: K\u00fcmedeki eleman say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><code>boolean isEmpty()<\/code>: K\u00fcmenin bo\u015f olup olmad\u0131\u011f\u0131n\u0131 kontrol eder.<\/li>\n<li><code>void clear()<\/code>: K\u00fcmedeki t\u00fcm elemanlar\u0131 kald\u0131r\u0131r.<\/li>\n<li><code>boolean addAll(Collection<? extends E> c)<\/code>: Belirtilen koleksiyondaki t\u00fcm elemanlar\u0131 k\u00fcmeye ekler.<\/li>\n<li><code>boolean removeAll(Collection<?> c)<\/code>: K\u00fcmeden, belirtilen koleksiyonda bulunan t\u00fcm elemanlar\u0131 kald\u0131r\u0131r (k\u00fcme fark\u0131).<\/li>\n<li><code>boolean retainAll(Collection<?> c)<\/code>: K\u00fcmede, yaln\u0131zca belirtilen koleksiyonda bulunan elemanlar\u0131 tutar (k\u00fcme kesi\u015fimi).<\/li>\n<\/ul>\n<h2>Set Uygulamalar\u0131<\/h2>\n<p>Java Collections Framework, <code>Set<\/code> aray\u00fcz\u00fcn\u00fcn \u00fc\u00e7 ana uygulamas\u0131n\u0131 sunar; her birinin kendine \u00f6zg\u00fc \u00f6zellikleri ve performans karakteristikleri vard\u0131r:<\/p>\n<h3>HashSet<\/h3>\n<p><code>HashSet<\/code>, <code>Set<\/code> aray\u00fcz\u00fcn\u00fcn en yayg\u0131n ve genel ama\u00e7l\u0131 uygulamas\u0131d\u0131r. Dahili olarak bir hash tablosu (<code>HashMap<\/code>) kullan\u0131r. Elemanlar\u0131n s\u0131ras\u0131 garanti edilmez (rastgele gibi g\u00f6r\u00fcnebilir) ve thread-safe de\u011fildir.<\/p>\n<ul>\n<li><strong>Performans:<\/strong> <code>add()<\/code>, <code>remove()<\/code>, <code>contains()<\/code> ve <code>size()<\/code> metotlar\u0131 ortalama olarak O(1) (sabit zaman) performans\u0131na sahiptir. Bu, \u00f6zellikle b\u00fcy\u00fck veri k\u00fcmeleriyle \u00e7al\u0131\u015f\u0131rken \u00e7ok h\u0131zl\u0131 i\u015flemler sa\u011flar. En k\u00f6t\u00fc durumda (\u00e7ok fazla hash \u00e7arp\u0131\u015fmas\u0131 oldu\u011funda) O(n) olabilir, ancak iyi tasarlanm\u0131\u015f <code>hashCode()<\/code> fonksiyonlar\u0131 ile bu durum nadirdir.<\/li>\n<li><strong>S\u0131ra:<\/strong> Elemanlar\u0131n s\u0131ras\u0131 garanti edilmez.<\/li>\n<li><strong>Kullan\u0131m:<\/strong> S\u0131ran\u0131n \u00f6nemli olmad\u0131\u011f\u0131 ve h\u0131zl\u0131 eri\u015fim\/ekleme\/silme i\u015flemlerinin gerekti\u011fi durumlarda tercih edilir.<\/li>\n<\/ul>\n<pre><code class=\"language-java\">\nimport java.util.HashSet;\nimport java.util.Set;\n\npublic class HashSetOrnegi {\n    public static void main(String[] args) {\n        Set<String> meyveler = new HashSet<>();\n\n        meyveler.add(\"Elma\");\n        meyveler.add(\"Muz\");\n        meyveler.add(\"\u00c7ilek\");\n        meyveler.add(\"Elma\"); \/\/ Tekrar eden eleman, eklenmeyecek\n\n        System.out.println(\"HashSet i\u00e7eri\u011fi: \" + meyveler); \/\/ S\u0131ra garanti edilmez\n\n        System.out.println(\"Muz var m\u0131? \" + meyveler.contains(\"Muz\"));\n        meyveler.remove(\"\u00c7ilek\");\n        System.out.println(\"\u00c7ilek \u00e7\u0131kar\u0131ld\u0131ktan sonra: \" + meyveler);\n    }\n}\n<\/code><\/pre>\n<h3>LinkedHashSet<\/h3>\n<p><code>LinkedHashSet<\/code>, <code>HashSet<\/code>&#8216;in t\u00fcm \u00f6zelliklerini ta\u015f\u0131r ancak ek olarak elemanlar\u0131n eklenme s\u0131ras\u0131n\u0131 (insertion order) korur. Dahili olarak hem bir hash tablosu hem de bir \u00e7ift ba\u011fl\u0131 liste (doubly linked list) kullan\u0131r.<\/p>\n<ul>\n<li><strong>Performans:<\/strong> <code>HashSet<\/code>&#8216;e benzer \u015fekilde, temel i\u015flemler ortalama olarak O(1) performans\u0131na sahiptir, ancak ba\u011fl\u0131 listeyi g\u00fcncelleme maliyeti nedeniyle <code>HashSet<\/code>&#8216;ten biraz daha yava\u015f olabilir.<\/li>\n<li><strong>S\u0131ra:<\/strong> Elemanlar\u0131n eklenme s\u0131ras\u0131n\u0131 korur.<\/li>\n<li><strong>Kullan\u0131m:<\/strong> Benzersiz elemanlara ihtiya\u00e7 duyuldu\u011funda ve bu elemanlar\u0131n eklenme s\u0131ras\u0131n\u0131n korunmas\u0131 gerekti\u011finde tercih edilir.<\/li>\n<\/ul>\n<pre><code class=\"language-java\">\nimport java.util.LinkedHashSet;\nimport java.util.Set;\n\npublic class LinkedHashSetOrnegi {\n    public static void main(String[] args) {\n        Set<String> renkler = new LinkedHashSet<>();\n\n        renkler.add(\"K\u0131rm\u0131z\u0131\");\n        renkler.add(\"Mavi\");\n        renkler.add(\"Ye\u015fil\");\n        renkler.add(\"K\u0131rm\u0131z\u0131\"); \/\/ Tekrar eden eleman, eklenmeyecek\n\n        System.out.println(\"LinkedHashSet i\u00e7eri\u011fi: \" + renkler); \/\/ Ekleme s\u0131ras\u0131 korunur\n    }\n}\n<\/code><\/pre>\n<h3>TreeSet<\/h3>\n<p><code>TreeSet<\/code>, elemanlar\u0131 s\u0131ral\u0131 bir \u015fekilde depolayan bir <code>Set<\/code> uygulamas\u0131d\u0131r. Dahili olarak bir K\u0131rm\u0131z\u0131-Siyah A\u011fa\u00e7 (Red-Black Tree) veri yap\u0131s\u0131n\u0131 kullan\u0131r. Elemanlar do\u011fal s\u0131ralar\u0131na g\u00f6re (<code>Comparable<\/code> aray\u00fcz\u00fc ile) veya bir <code>Comparator<\/code> nesnesi arac\u0131l\u0131\u011f\u0131yla belirtilen \u00f6zel bir s\u0131raya g\u00f6re d\u00fczenlenir.<\/p>\n<ul>\n<li><strong>Performans:<\/strong> <code>add()<\/code>, <code>remove()<\/code> ve <code>contains()<\/code> metotlar\u0131 O(log n) performans\u0131na sahiptir. Bu, <code>HashSet<\/code> ve <code>LinkedHashSet<\/code>&#8216;ten daha yava\u015ft\u0131r, ancak s\u0131ral\u0131 depolama avantaj\u0131 sunar.<\/li>\n<li><strong>S\u0131ra:<\/strong> Elemanlar\u0131 her zaman s\u0131ral\u0131 bir \u015fekilde tutar.<\/li>\n<li><strong>Kullan\u0131m:<\/strong> Elemanlar\u0131n benzersiz olmas\u0131n\u0131n yan\u0131 s\u0131ra, her zaman s\u0131ral\u0131 bir \u015fekilde tutulmas\u0131 gerekti\u011finde tercih edilir. <code>null<\/code> eleman eklenirken dikkatli olunmal\u0131d\u0131r, \u00e7\u00fcnk\u00fc s\u0131ralama i\u00e7in kar\u015f\u0131la\u015ft\u0131rma yap\u0131lmas\u0131 gerekecektir.<\/li>\n<\/ul>\n<pre><code class=\"language-java\">\nimport java.util.TreeSet;\nimport java.util.Set;\n\npublic class TreeSetOrnegi {\n    public static void main(String[] args) {\n        Set<Integer> sayilar = new TreeSet<>();\n\n        sayilar.add(50);\n        sayilar.add(20);\n        sayilar.add(80);\n        sayilar.add(20); \/\/ Tekrar eden eleman, eklenmeyecek\n        sayilar.add(10);\n\n        System.out.println(\"TreeSet i\u00e7eri\u011fi: \" + sayilar); \/\/ S\u0131ral\u0131 bir \u015fekilde\n    }\n}\n<\/code><\/pre>\n<h2>Hangi Set Uygulamas\u0131n\u0131 Ne Zaman Kullanmal\u0131?<\/h2>\n<p>Do\u011fru <code>Set<\/code> uygulamas\u0131n\u0131 se\u00e7mek, uygulaman\u0131z\u0131n performans\u0131n\u0131 ve davran\u0131\u015f\u0131n\u0131 do\u011frudan etkiler.<\/p>\n<ul>\n<li><strong><code>HashSet<\/code>:<\/strong>\n<ul>\n<li>En h\u0131zl\u0131 performans gerekti\u011finde (O(1) ortalama).<\/li>\n<li>Elemanlar\u0131n s\u0131ras\u0131n\u0131n \u00f6nemli olmad\u0131\u011f\u0131 durumlarda.<\/li>\n<li>En s\u0131k kullan\u0131lan ve genel ama\u00e7l\u0131 <code>Set<\/code> uygulamas\u0131d\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><strong><code>LinkedHashSet<\/code>:<\/strong>\n<ul>\n<li>Elemanlar\u0131n benzersiz olmas\u0131n\u0131n yan\u0131 s\u0131ra, eklenme s\u0131ras\u0131n\u0131n korunmas\u0131 gerekti\u011finde.<\/li>\n<li><code>HashSet<\/code>&#8216;e g\u00f6re biraz daha yava\u015f olsa da, hala \u00e7ok iyi performans sunar.<\/li>\n<\/ul>\n<\/li>\n<li><strong><code>TreeSet<\/code>:<\/strong>\n<ul>\n<li>Elemanlar\u0131n her zaman s\u0131ral\u0131 bir \u015fekilde (do\u011fal s\u0131ralama veya \u00f6zel <code>Comparator<\/code> ile) tutulmas\u0131 gerekti\u011finde.<\/li>\n<li><code>HashSet<\/code> ve <code>LinkedHashSet<\/code>&#8216;e g\u00f6re daha yava\u015f (O(log n)), ancak s\u0131ral\u0131 eri\u015fim ve aral\u0131k sorgular\u0131 i\u00e7in idealdir.<\/li>\n<li>Elemanlar\u0131n <code>Comparable<\/code> aray\u00fcz\u00fcn\u00fc uygulamas\u0131 veya bir <code>Comparator<\/code> sa\u011flanmas\u0131 zorunludur.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Performans \u0130pu\u00e7lar\u0131<\/h3>\n<ul>\n<li><strong><code>hashCode()<\/code> ve <code>equals()<\/code>:<\/strong> \u00d6zel nesneleri <code>HashSet<\/code> veya <code>LinkedHashSet<\/code> i\u00e7inde kullan\u0131rken, bu nesneler i\u00e7in <code>hashCode()<\/code> ve <code>equals()<\/code> metotlar\u0131n\u0131 do\u011fru bir \u015fekilde override etmek hayati \u00f6nem ta\u015f\u0131r. Aksi takdirde, <code>Set<\/code> elemanlar\u0131n benzersizli\u011fini do\u011fru bir \u015fekilde belirleyemez ve yinelenen elemanlar i\u00e7erebilir veya var olan elemanlar\u0131 bulamayabilir.<\/li>\n<li><strong>Ba\u015flang\u0131\u00e7 Kapasitesi ve Y\u00fck Fakt\u00f6r\u00fc (Load Factor):<\/strong> <code>HashSet<\/code> ve <code>LinkedHashSet<\/code> i\u00e7in ba\u015flang\u0131\u00e7 kapasitesini (initial capacity) ve y\u00fck fakt\u00f6r\u00fcn\u00fc (load factor) ayarlamak, hash \u00e7arp\u0131\u015fmalar\u0131n\u0131 azaltarak performans\u0131 optimize edebilir. \u00c7ok fazla eleman ekleyece\u011finizi biliyorsan\u0131z, ba\u015flang\u0131\u00e7 kapasitesini yeterince b\u00fcy\u00fck ayarlamak, yeniden boyutland\u0131rma i\u015flemlerini azalt\u0131r.<\/li>\n<li><strong><code>TreeSet<\/code> ve S\u0131ralama:<\/strong> <code>TreeSet<\/code> kullan\u0131rken, elemanlar\u0131n do\u011fal s\u0131ralamas\u0131n\u0131 (<code>Comparable<\/code>) veya \u00f6zel s\u0131ralamas\u0131n\u0131 (<code>Comparator<\/code>) iyi anlamak \u00f6nemlidir. B\u00fcy\u00fck nesneler i\u00e7in <code>Comparator<\/code> kullanmak, nesnelerin kar\u015f\u0131la\u015ft\u0131rma mant\u0131\u011f\u0131n\u0131 daha esnek hale getirir.<\/li>\n<\/ul>\n<h2>Pratik Kullan\u0131m Senaryolar\u0131<\/h2>\n<h3>Yinelenen Elemanlar\u0131 Kald\u0131rma<\/h3>\n<p><code>Set<\/code>&#8216;in en yayg\u0131n kullan\u0131m alanlar\u0131ndan biri, bir koleksiyondaki yinelenen elemanlar\u0131 h\u0131zl\u0131ca kald\u0131rmakt\u0131r.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Set;\n\npublic class YinelenenleriKaldirma {\n    public static void main(String[] args) {\n        List<String> isimler = new ArrayList<>(Arrays.asList(\"Ali\", \"Ay\u015fe\", \"Mehmet\", \"Ali\", \"Fatma\", \"Ay\u015fe\"));\n        System.out.println(\"Orijinal liste: \" + isimler);\n\n        \/\/ Listeyi Set'e d\u00f6n\u00fc\u015ft\u00fcrerek yinelenenleri kald\u0131rma\n        Set<String> benzersizIsimler = new HashSet<>(isimler);\n        System.out.println(\"Benzersiz isimler: \" + benzersizIsimler);\n\n        \/\/ \u0130sterseniz tekrar List'e d\u00f6n\u00fc\u015ft\u00fcrebilirsiniz\n        List<String> benzersizIsimlerList = new ArrayList<>(benzersizIsimler);\n        System.out.println(\"Benzersiz isimler (liste olarak): \" + benzersizIsimlerList);\n    }\n}\n<\/code><\/pre>\n<h3>\u0130ki K\u00fcmenin Kesi\u015fimi, Birle\u015fimi ve Fark\u0131<\/h3>\n<p><code>Set<\/code> aray\u00fcz\u00fcn\u00fcn <code>addAll()<\/code>, <code>retainAll()<\/code> ve <code>removeAll()<\/code> metotlar\u0131, matematiksel k\u00fcme i\u015flemlerini kolayca yapman\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.HashSet;\nimport java.util.Set;\n\npublic class KumeIslemleri {\n    public static void main(String[] args) {\n        Set<Integer> kumeA = new HashSet<>();\n        kumeA.add(1); kumeA.add(2); kumeA.add(3); kumeA.add(4);\n\n        Set<Integer> kumeB = new HashSet<>();\n        kumeB.add(3); kumeB.add(4); kumeB.add(5); kumeB.add(6);\n\n        System.out.println(\"K\u00fcme A: \" + kumeA);\n        System.out.println(\"K\u00fcme B: \" + kumeB);\n\n        \/\/ Birle\u015fim (Union)\n        Set<Integer> birlesim = new HashSet<>(kumeA);\n        birlesim.addAll(kumeB);\n        System.out.println(\"Birle\u015fim (A U B): \" + birlesim); \/\/ [1, 2, 3, 4, 5, 6]\n\n        \/\/ Kesi\u015fim (Intersection)\n        Set<Integer> kesisim = new HashSet<>(kumeA);\n        kesisim.retainAll(kumeB);\n        System.out.println(\"Kesi\u015fim (A &cap; B): \" + kesisim); \/\/ [3, 4]\n\n        \/\/ Fark (Difference)\n        Set<Integer> fark = new HashSet<>(kumeA);\n        fark.removeAll(kumeB);\n        System.out.println(\"Fark (A - B): \" + fark); \/\/ [1, 2]\n    }\n}\n<\/code><\/pre>\n<h3>\u00d6zel Nesnelerle Kullan\u0131m (hashCode() ve equals() \u00d6nemi)<\/h3>\n<p>Kendi tan\u0131mlad\u0131\u011f\u0131n\u0131z s\u0131n\u0131flar\u0131n nesnelerini <code>HashSet<\/code> veya <code>LinkedHashSet<\/code> i\u00e7inde kullan\u0131rken, bu nesnelerin benzersizli\u011fini do\u011fru bir \u015fekilde sa\u011flamak i\u00e7in <code>Object<\/code> s\u0131n\u0131f\u0131ndan miras al\u0131nan <code>hashCode()<\/code> ve <code>equals()<\/code> metotlar\u0131n\u0131 ge\u00e7ersiz k\u0131lman\u0131z (override etmeniz) zorunludur. Aksi takdirde, <code>Set<\/code> ayn\u0131 i\u00e7eri\u011fe sahip iki farkl\u0131 nesneyi iki ayr\u0131 eleman olarak kabul edebilir.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.HashSet;\nimport java.util.Objects;\nimport java.util.Set;\n\nclass Ogrenci {\n    private String ad;\n    private int ogrenciNo;\n\n    public Ogrenci(String ad, int ogrenciNo) {\n        this.ad = ad;\n        this.ogrenciNo = ogrenciNo;\n    }\n\n    public String getAd() { return ad; }\n    public int getOgrenciNo() { return ogrenciNo; }\n\n    @Override\n    public String toString() {\n        return \"Ogrenci{\" + \"ad='\" + ad + '\\'' + \", ogrenciNo=\" + ogrenciNo + '}';\n    }\n\n    \/\/ hashCode() ve equals() metotlar\u0131n\u0131 override etmek kritik \u00f6neme sahiptir.\n    \/\/ IDE'ler (IntelliJ, Eclipse) bu metotlar\u0131 otomatik olarak olu\u015fturabilir.\n    @Override\n    public boolean equals(Object o) {\n        if (this == o) return true;\n        if (o == null || getClass() != o.getClass()) return false;\n        Ogrenci ogrenci = (Ogrenci) o;\n        return ogrenciNo == ogrenci.ogrenciNo &&\n               Objects.equals(ad, ogrenci.ad);\n    }\n\n    @Override\n    public int hashCode() {\n        return Objects.hash(ad, ogrenciNo);\n    }\n}\n\npublic class OgrenciSetOrnegi {\n    public static void main(String[] args) {\n        Set<Ogrenci> ogrenciler = new HashSet<>();\n\n        ogrenciler.add(new Ogrenci(\"Ahmet\", 101));\n        ogrenciler.add(new Ogrenci(\"Zeynep\", 102));\n        ogrenciler.add(new Ogrenci(\"Ahmet\", 101)); \/\/ Ayn\u0131 i\u00e7erikli \u00f6\u011frenci\n\n        System.out.println(\"\u00d6\u011frenci say\u0131s\u0131: \" + ogrenciler.size());\n        System.out.println(\"\u00d6\u011frenciler: \" + ogrenciler);\n\n        \/\/ E\u011fer hashCode() ve equals() override edilmeseydi, \u00e7\u0131kt\u0131 3 olurdu!\n        \/\/ Do\u011fru override edildi\u011fi i\u00e7in \u00e7\u0131kt\u0131 2 olacakt\u0131r.\n    }\n}\n<\/code><\/pre>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Java&#8217;daki <code>Set<\/code> aray\u00fcz\u00fc, benzersiz eleman koleksiyonlar\u0131na ihtiya\u00e7 duyulan bir\u00e7ok senaryoda vazge\u00e7ilmez bir ara\u00e7t\u0131r. <code>HashSet<\/code>, <code>LinkedHashSet<\/code> ve <code>TreeSet<\/code> gibi farkl\u0131 uygulamalar\u0131 sayesinde, performans, s\u0131ralama ve ekleme s\u0131ras\u0131 gibi gereksinimlere g\u00f6re en uygun \u00e7\u00f6z\u00fcm\u00fc se\u00e7me esnekli\u011fi sunar. Koleksiyonunuzdaki veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc korumak ve yinelenen elemanlardan ka\u00e7\u0131nmak i\u00e7in <code>Set<\/code>&#8216;i etkin bir \u015fekilde kullanmak, daha sa\u011flam ve verimli Java uygulamalar\u0131 geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>1. Java Set null eleman kabul eder mi?<\/strong><\/p>\n<p>Evet, <code>HashSet<\/code> ve <code>LinkedHashSet<\/code> bir adet <code>null<\/code> eleman kabul edebilir. <code>TreeSet<\/code> ise do\u011fal s\u0131ralama veya kullan\u0131lan <code>Comparator<\/code>&#8216;\u0131n <code>null<\/code>&#8216;lar\u0131 nas\u0131l ele ald\u0131\u011f\u0131na ba\u011fl\u0131 olarak <code>NullPointerException<\/code> f\u0131rlatabilir. Genellikle, <code>TreeSet<\/code>&#8216;e <code>null<\/code> eklemek \u00f6nerilmez.<\/p>\n<p><strong>2. Java Set thread-safe midir?<\/strong><\/p>\n<p>Hay\u0131r, <code>Set<\/code> aray\u00fcz\u00fcn\u00fcn standart uygulamalar\u0131 (<code>HashSet<\/code>, <code>LinkedHashSet<\/code>, <code>TreeSet<\/code>) thread-safe de\u011fildir. \u00c7oklu i\u015f par\u00e7ac\u0131kl\u0131 ortamlarda g\u00fcvenli kullan\u0131m i\u00e7in <code>Collections.synchronizedSet(new HashSet<...>())<\/code> gibi senkronize edilmi\u015f bir sarmalay\u0131c\u0131 kullanabilir veya <code>java.util.concurrent<\/code> paketindeki <code>CopyOnWriteArraySet<\/code> gibi thread-safe alternatifleri tercih edebilirsiniz.<\/p>\n<p><strong>3. Set elemanlar\u0131n\u0131 nas\u0131l s\u0131ralar?<\/strong><\/p>\n<ul>\n<li><code>HashSet<\/code>: Elemanlar\u0131n s\u0131ras\u0131 garanti edilmez.<\/li>\n<li><code>LinkedHashSet<\/code>: Elemanlar\u0131n eklenme s\u0131ras\u0131n\u0131 (insertion order) korur.<\/li>\n<li><code>TreeSet<\/code>: Elemanlar\u0131 her zaman s\u0131ral\u0131 bir \u015fekilde tutar. Bu s\u0131ralama, elemanlar\u0131n do\u011fal s\u0131ralamas\u0131 (<code>Comparable<\/code> aray\u00fcz\u00fc ile) veya <code>TreeSet<\/code> olu\u015fturulurken sa\u011flanan bir <code>Comparator<\/code> ile belirlenir.<\/li>\n<\/ul>\n<p><strong>4. <code>List<\/code> ve <code>Set<\/code> aras\u0131ndaki temel fark nedir?<\/strong><\/p>\n<p>Temel fark, <code>Set<\/code>&#8216;in yinelenen elemanlara izin vermemesidir; her eleman benzersizdir. <code>List<\/code> ise yinelenen elemanlar\u0131 i\u00e7erebilir ve elemanlar\u0131n eklenme s\u0131ras\u0131n\u0131 korur, bu sayede indeks tabanl\u0131 eri\u015fim m\u00fcmk\u00fcnd\u00fcr. <code>Set<\/code>&#8216;te indeks tabanl\u0131 eri\u015fim yoktur.<\/p>\n<p><strong>5. \u00d6zel nesneleri Set i\u00e7inde kullan\u0131rken <code>hashCode()<\/code> ve <code>equals()<\/code> metotlar\u0131 neden \u00f6nemlidir?<\/strong><\/p>\n<p><code>HashSet<\/code> ve <code>LinkedHashSet<\/code>, elemanlar\u0131n benzersizli\u011fini ve konumunu belirlemek i\u00e7in bu metotlar\u0131 kullan\u0131r. <code>hashCode()<\/code> bir nesnenin hash kodunu \u00fcretirken, <code>equals()<\/code> iki nesnenin e\u015fit olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. E\u011fer bu metotlar do\u011fru bir \u015fekilde override edilmezse, ayn\u0131 i\u00e7eri\u011fe sahip iki farkl\u0131 nesne <code>Set<\/code> taraf\u0131ndan farkl\u0131 olarak alg\u0131lanabilir ve <code>Set<\/code>&#8216;in benzersizlik \u00f6zelli\u011fi bozulur.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Java Set \u2013 Java&#8217;da K\u00fcme Yap\u0131s\u0131\nJava Collections Framework&#8217;\u00fcn \u00f6nemli bir par\u00e7as\u0131 olan Set aray\u00fcz\u00fc, programlama d\u00fcnyas\u0131nda benzersiz elem","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1408],"tags":[],"class_list":{"0":"post-34297","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java Set \u2013 Java&#039;da K\u00fcme Yap\u0131s\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java Set \u2013 Java&#039;da K\u00fcme Yap\u0131s\u0131\" \/>\n<meta property=\"og:description\" content=\"Java Set \u2013 Java&#039;da K\u00fcme Yap\u0131s\u0131 Java Collections Framework&#039;\u00fcn \u00f6nemli bir par\u00e7as\u0131 olan Set aray\u00fcz\u00fc, programlama d\u00fcnyas\u0131nda benzersiz elem\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-14T10:41:27+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Java Set \u2013 Java&#8217;da K\u00fcme Yap\u0131s\u0131\",\"datePublished\":\"2025-11-14T10:41:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/\"},\"wordCount\":1525,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Java\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/\",\"name\":\"Java Set \u2013 Java'da K\u00fcme Yap\u0131s\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-14T10:41:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java Set \u2013 Java&#8217;da K\u00fcme Yap\u0131s\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java Set \u2013 Java'da K\u00fcme Yap\u0131s\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/","og_locale":"tr_TR","og_type":"article","og_title":"Java Set \u2013 Java'da K\u00fcme Yap\u0131s\u0131","og_description":"Java Set \u2013 Java'da K\u00fcme Yap\u0131s\u0131 Java Collections Framework'\u00fcn \u00f6nemli bir par\u00e7as\u0131 olan Set aray\u00fcz\u00fc, programlama d\u00fcnyas\u0131nda benzersiz elem","og_url":"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-14T10:41:27+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"11 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Java Set \u2013 Java&#8217;da K\u00fcme Yap\u0131s\u0131","datePublished":"2025-11-14T10:41:27+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/"},"wordCount":1525,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Java"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/","url":"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/","name":"Java Set \u2013 Java'da K\u00fcme Yap\u0131s\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-14T10:41:27+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/java-set-javada-kume-yapisi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Java Set \u2013 Java&#8217;da K\u00fcme Yap\u0131s\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34297","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34297"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34297\/revisions"}],"predecessor-version":[{"id":34298,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34297\/revisions\/34298"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34297"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}