Java'da HashSet
tags adlı bir HashSet<String> oluşturun, tags.add("oak"); çağırın, sonra tags.add("pine");, sonra yine tags.add("oak"); ve tags.size() yazdırın. Bin.java dosyasını derleyin ve java Bin çalıştırın. Ekran bir satır göstermelidir: 2. İkinci oak üçüncü bir değer yaratmadı. Bir sette benzersiz değerler — bu sayfanın öğrettiği budur.
Benzersiz değerler, anahtar-ve-değer çiftleri değil
HashMap sayfasında put ve get ile bir değere işaret eden anahtar saklıyordunuz. HashSet değerleri tek başına saklar. Her değer en fazla bir kez görünür. Aynı kelimeyi iki kez add ederseniz, set onu yine bir kez tutar. Bu sayfanın öğretim yolunda ayrı bir anahtar dizgesi yoktur.
Bin.java dosyasını açın. Genel sınıf adını Bin tutun ki dosya adıyla eşleşsin. Kalan HashMap satırlarını, scores.put, scores.get ve her Desk demosunu silin. Bunlar map sayfasınındır. Kalan her ArrayList, Rack, Scanner veya nextLine çağrısını da silin. Program yazmanızı beklememelidir.
Üste yakın, public class Bin üstüne yazın:
import java.util.HashSet;
Bu import, HashSet türünü kısa adla erişilir kılar. O olmadan javac bu sayfada kısa ad HashSet görmez. java.util ve HashSet yazımını dikkatli tutun. Burada import java.util.*; şartı uydurmayın — tek kesin import yeter.
main içinde seti oluşturun:
HashSet<String> tags = new HashSet<String>();
Açısal parantezler String tutar çünkü bu ders kelime saklar. Ad tags tuttuğunuz addır. new HashSet<String>() çağrısı boş bir set kurar. Bu anda sıfır değer tutar.
oak, pine, yine oak ekleyin — sonra size
Kendi satırında tags.add("oak"); çağırın. Sonra tags.add("pine"); çağırın. Sonra aynı kelimeyle üçüncü kez tags.add("oak"); çağırın. Üçüncü çağrı seti büyütmez. Sonra yazın:
System.out.println(tags.size());
İlk tutulan dosya için tüm seti değil, boyutu yazdırın. Sayı 2 yinelenenin yok sayıldığını kanıtlar. Derlemeden önce kaydedin.
import java.util.HashSet;
public class Bin {
public static void main(String[] args) {
HashSet<String> tags = new HashSet<String>();
tags.add("oak");
tags.add("pine");
tags.add("oak");
System.out.println(tags.size());
}
}
Bin.java dosyasını tutan klasörden javac Bin.java çalıştırın. Parantezler, süslü parantezler, açısal parantezler ve noktalı virgüller uyuşunca javac kendi satırını yazmaz. Sonra java Bin çalıştırın — java Bin.java değil, java HashSet değil. Çalıştırma komutundan .java sonunu çıkarın.
Program bir satır yazıp durmalıdır: 2. Yazmanızı istememelidir. Terminal klavye girdisi bekliyorsa, bir dosyada eski alıştırmadan bir nextLine çağrısı hâlâ duruyor demektir. O çağrıyı silin; oluşturmayı, üç add satırını ve System.out.println(tags.size()); satırını tutun.
Çalıştırmayı bir kez gezin. Java Bin.main ile başlar. Import hangi HashSet kastettiğinizi çoktan adlandırmıştır. new satırı boş set kurar. İlk add oak saklar. İkinci pine saklar. Üçüncü add("oak") oak’ın zaten var olduğunu bulur ve sayacı yükseltmez. size() yazdırımı 2 yazar. Ekran 2 gösterir. Başka bir şey yazılmamalıdır. 3 görürseniz bu HashSet dosyasını çalıştırmıyorsunuzdur ya da elm gibi farklı bir üçüncü kelime eklemişsinizdir. leaf görürseniz Desk HashMap demosu hâlâ çalışıyordur — java Bin’e geçin. [oak, pine] görürseniz size() yerine tüm seti yazdırmışsınızdır; bu ilk öğretim dosyası için boyut yazdırımını tutun.
javac HashSet bulamadığını söylerse import satırı eksiktir, yanlış yazılmıştır veya public class Bin sonrasındadır. import java.util.HashSet; satırını sınıf satırının üstüne taşıyın. Tırnaksız tags.add(oak); yazarsanız javac oak kelimesini eksik ad sayar. Tırnakları tutun. Bu sayfada HashSet üzerinde put çağırmayın — o ad HashMap’e aittir.
contains ile sorun
İkinci bir Bin dosyası, aynı ilk iki add’den sonra oak’ın sette olup olmadığını kontrol eder.
import java.util.HashSet;
public class Bin {
public static void main(String[] args) {
HashSet<String> tags = new HashSet<String>();
tags.add("oak");
tags.add("pine");
System.out.println(tags.contains("oak"));
}
}
O ikinci dosyayı aynı şekilde derleyip çalıştırın. Ekran true gösterir. contains("oak") çağrısı o değerin sette durup durmadığını sorar. Bir boolean döndürür. Yalnızca oak ve pine eklendikten sonra contains("elm") sorarsanız ekran false gösterir — bu geçerlidir, ancak tutulan ikinci dosya ekranın true olması için "oak" kullanır.
Bu sayfada set üzerinde döngüyü zorunluluk yapmayın. Sonraki sayfa — iterating — koleksiyonları dolaşır. Burada add, size ve contains ile kalın.
HashMap ile yan yana
Kısa bir tablo farkı net tutar.
📊 HashSet vs HashMap
| Piece | On this page |
|---|---|
| store | tags.add("oak"); — value only |
| duplicate | second add("oak") does not grow size |
| read check | tags.contains("oak") → true |
| HashMap leftover | put / get — not this page’s path |
Tablo yalnızca bir hatırlatmadır. Tuttuğunuz yazılmış parçalar HashSet import’u, oluşturma satırı, add çağrıları, size() ve containstir. |
HashMap ve ArrayList ile karşılaştırma
HashMap sayfasında put ve get bir anahtar kullanıyordu. Bu sayfada add ve contains değerin kendisini kullanır. leaf yazdıran kalan bir Desk dosyası başka bir derstir. Bu sayfa için HashSet<String> tags ve 2 yazdıran boyut demosunu tutun.
Bir ArrayList aynı kelimeyi iki kez tutabilir. Bir HashSet o kelimenin ikinci aynı add çağrısıyla büyümez. Bu benzersizlik bu dersin noktasıdır. Bin demolarına tags.get(0) karıştırmayın — setler bu sayfada liste yuva numaraları kullanmaz.
Eski Desk.java veya Rack.java dosyaları yakında duruyorsa, hangi sınıfı çalıştırdığınızı karıştırmıyorlarsa bırakın; karıştırıyorlarsa silin. Bu dersin HashSet dosyasını derledikten sonra java Bin çalıştırın.
iterating için ne kalır
Bu sayfa benzersiz değerlerden oluşan bir set açar. Sonraki sayfa koleksiyonları bir döngüyle dolaşır. Burada add, size ve contains ile kalın. Bu sayfada set üzerinde for-each’i zorunluluk yapmayın; ders hedefi benzersizlik ve size() ile ekran 2dir.
iterating öncesi
java.util.HashSet import edebilir, HashSet<String> tags oluşturabilir, oak, pine ve yine oak ekleyebilir, sonra tags.size() yazdırarak 2 görebilirsiniz. İkinci bir dosya tags.contains("oak") yazdırarak true gösterebilir. Her tutulan demo için Bin.java derleyin ve java Bin çalıştırın. Set benzersiz değerleri tuttu. Sonraki sayfa iterating’dir; orada bir koleksiyondaki değerleri tek tek dolaşırsınız.
Import’u sınıfın üstünde tutun. Boyut demosunda yinelenen add("oak") çağrısını tutun ki sayı 2 kalsın. Boolean kontrolü için contains tutun. Bu alışkanlıklar ilerlemadan önce bu sayfanın kontrol noktasıdır. Yinelenen oak ile üç add’den sonra size() 2 gösterdiğinde HashSet bu ders için işini yaptı ve sonraki konu için hazırsınız.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek