Bu eğitimde Java HashSet sınıfını öğreneceğiz. Örnekler yardımıyla farklı hash set yöntemlerini ve işlemlerini öğreneceğiz.
HashSet
Java Koleksiyonları çerçevenin sınıf karma tablo veri yapısının işlevleri sağlar.
Set arayüzünü uygular.
HashSet oluşturma
Bir hash kümesi oluşturmak için önce java.util.HashSet
paketi içe aktarmalıyız .
Paketi içe aktardıktan sonra, Java'da hash setlerini nasıl oluşturabiliriz.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Burada adlı bir hash seti oluşturduk numbers
.
Dikkat edin, yeni bölüm HashSet(8, 0.75)
. Burada ilk parametre kapasite ve ikinci parametre loadFactor'dür .
- kapasite - Bu hash setinin kapasitesi 8'dir. Yani, 8 element saklayabilir.
- loadFactor - Bu hash setinin yük faktörü 0.6'dır . Bu, hash setimiz% 60 oranında doldurulduğunda, elemanların orijinal hash tablosunun iki katı boyutunda yeni bir hash tablosuna taşındığı anlamına gelir.
Varsayılan kapasite ve yük faktörü
Kapasitesini ve yük faktörünü tanımlamadan bir hash tablosu oluşturmak mümkündür. Örneğin,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Varsayılan olarak,
- hash setinin kapasitesi 16 olacak
- yük faktörü 0,75 olacaktır
HashSet Yöntemleri
HashSet
Sınıf bize sette çeşitli işlemleri gerçekleştirmek için izin çeşitli yöntemler sağlar.
HashSet'e Eleman Ekle
add()
- belirtilen elemanı sete ekleraddAll()
- belirtilen koleksiyonun tüm öğelerini sete ekler
Örneğin,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumber = new HashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet numbers = new HashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); ) )
Çıktı
HashSet: (2, 4, 6) Yeni HashSet: (2, 4, 5, 6)
HashSet Öğelerine Erişim
Bir hash setinin öğelerine erişmek için iterator()
yöntemi kullanabiliriz . Bu yöntemi kullanmak için java.util.Iterator
paketi içe aktarmalıyız . Örneğin,
import java.util.HashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Calling iterator() method Iterator iterate = numbers.iterator(); System.out.print("HashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) )
Çıktı
HashSet: (2, 5, 6) Yineleyici kullanan HashSet: 2, 5, 6,
Öğeleri Kaldır
remove()
- belirtilen öğeyi kümeden kaldırırremoveAll()
- setteki tüm öğeleri kaldırır
Örneğin,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Using remove() method boolean value1 = numbers.remove(5); System.out.println("Is 5 removed? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("Are all elements removed? " + value2); ) )
Çıktı
HashSet: (2, 5, 6) 5 kaldırıldı mı? true Tüm öğeler kaldırıldı mı? doğru
İşlemleri Ayarla
HashSet
Sınıfın çeşitli yöntemleri, çeşitli set işlemlerini gerçekleştirmek için de kullanılabilir.
Setler Birliği
İki set arasındaki birleşimi gerçekleştirmek için addAll()
yöntemi kullanabiliriz . Örneğin,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet numbers = new HashSet(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) )
Çıktı
HashSet1: (2, 4) HashSet2: (1, 3) Union is: (1, 2, 3, 4)
Kümelerin Kesişimi
İki set arasındaki kesişimi gerçekleştirmek için retainAll()
yöntemi kullanabiliriz . Örneğin
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers); HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) )
Çıktı
HashSet1: (2, 3) HashSet2: (2, 4) Kesişim: (2)
Kümelerin Farkı
İki küme arasındaki farkı hesaplamak için removeAll()
yöntemi kullanabiliriz . Örneğin,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers); HashSet oddNumbers = new HashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); // Difference between HashSet1 and HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) )
Çıktı
HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Fark: (2)
Alt küme
Bir kümenin başka bir kümenin alt kümesi olup olmadığını kontrol etmek için containsAll()
yöntemi kullanabiliriz . Örneğin,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is HashSet2 is subset of HashSet1? " + result); ) )
Çıktı
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) HashSet2, HashSet1'in bir alt kümesi mi? doğru
HashSet'in Diğer Yöntemleri
Yöntem | Açıklama |
---|---|
clone() | Bir kopyasını oluşturur HashSet |
contains() | HashSet Belirtilen öğeyi arar ve bir mantıksal sonuç döndürür |
isEmpty() | HashSet Boş olup olmadığını kontrol eder |
size() | Boyutunu verir HashSet |
clear() | Tüm öğeleri kaldırır HashSet |
HashSet yöntemleri hakkında daha fazla bilgi edinmek için Java HashSet'i (resmi Java belgeleri) ziyaret edin.
Neden HashSet?
Java'da, HashSet
öğelere rastgele erişmemiz gerektiğinde yaygın olarak kullanılır. Bunun nedeni, bir karma tablosundaki öğelere karma kodlar kullanılarak erişilmesidir.
Bir elemanın karma kodu, bir karma tablodaki elemanın tanımlanmasına yardımcı olan benzersiz bir kimliktir.
HashSet
yinelenen öğeler içeremez. Bu nedenle, her bir hash set elemanının benzersiz bir hashcode'u vardır.
Not: HashSet senkronize edilmemiştir. Yani, birden fazla iş parçacığı, karma kümeye aynı anda erişirse ve evrelerden biri karma kümesini değiştirirse. Daha sonra harici olarak senkronize edilmelidir.