Java Seti Nedir?
Set , Java Koleksiyon Çerçevesinden bir arabirimdir, ancak Set , List 'in aksine sıralı bir koleksiyon değildir . Bu, Java Set öğelerinin belirli bir sıra olmadan tutulduğu anlamına gelir . Dolayısıyla, bir öğe ekleyebileceğiniz konum üzerinde herhangi bir kontrol yoktur. Ayrıca, öğelere dizinlerine göre erişemezsiniz. Matematiksel olarak, bir Küme benzersiz öğelerin bir koleksiyonudur. Aslında bu, aynı öğelerin depolanamadığı sırasız bir Koleksiyondur (sırasız Koleksiyon). Bir Set öğesine kasıtlı olarak yinelenen bir öğe eklerseniz , bu eylem yok sayılır ve Set değişmez. Bununla birlikte, içinde bir boş öğenin saklanmasına izin verilir.Uygulamaları ayarla
Java Set bir arabirimdir, bu nedenle nesneleri oluşturmak için uygulamalarından birini kullanmanız gerekir. Bunlar HashSet , TreeSet ve LinkedHashSet'tir . Set s'de , her öğe yalnızca bir örnekte depolanır ve Set'in farklı uygulamaları, öğeleri depolamak için farklı bir sıra kullanır. Bir HashSet'te , öğelerin sırası karmaşık bir algoritma tarafından belirlenir. Depolama sırası sizin için önemliyse, nesneleri karşılaştırma düzeninde artan düzende depolayan bir TreeSet kabı veya bir LinkedHashSet kullanın., öğeleri ek sırada saklar. Kümeler genellikle üyelik testi için kullanılır, böylece bir nesnenin belirli bir kümeye ait olup olmadığını kolayca kontrol edebilirsiniz, bu nedenle pratikte genellikle hızlı arama için optimize edilmiş bir HashSet uygulaması seçilir. HashSet, öğeleri dahili olarak depolamak için hashCode() yöntemi tarafından döndürülen karma değerlerini kullanan bir koleksiyondur . Yani, HashSet<E> içinde , HashSet'in değerlerini anahtarlar olarak depolayan HashMap<E, Object> nesnesi saklanır . Hash kodlarını kullanmak, Set öğelerini hızlı bir şekilde aramanıza, eklemenize ve kaldırmanıza olanak tanır . LinkedHashSet bir HashSet'tirbu, öğeleri bağlantılı bir listede de saklar. Normal bir HashSet, öğe sırasını korumaz. Birincisi, resmen mevcut değildir ve ikincisi, yalnızca bir öğe eklendiğinde iç düzen bile önemli ölçüde değişebilir. Ve LinkedHashSet'ten bir yineleyici alabilir ve tüm öğeleri LinkedHashSet'e eklendikleri sırayla gözden geçirmek için kullanabilirsiniz . Sık değil, ama bazen çok gerekli olabilir. TreeSet, öğeleri değer sıralı bir ağaç olarak depolayan bir koleksiyondur. TreeSet<E> içinde tüm bu değerleri saklayan bir TreeMap<E, Object> bulunur. Ve bu Ağaç Haritasıöğeleri depolamak için kırmızı-siyah dengeli bir ikili ağaç kullanır. Bu nedenle çok hızlı add() , remove() , include() işlemlerine sahiptir .Bir Küme Nesnesi Oluşturun
Bir Küme Nesnesi oluşturmak için aşağıdaki formlardan birini kullanabilirsiniz:
Set<Integer> intSet = new HashSet<>();
Set<String> vSet = new HashSet<>();
Set mySet = new LinkedHashSet();
HashSet<String> myHashset = new HashSet<>();
İşte 2 Set s, HashSet ve LinkedHashSet oluşturduğumuz ve her birine for 5 öğe eklediğimiz basit bir örnek. Bunun için add() yöntemini kullanabiliriz .
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
public class HashSetTest {
public static void main(String[] args) {
Set mySet = new HashSet();
Set mySet2 = new LinkedHashSet();
//adding some string elements
mySet.add("Stuart");
mySet.add("Alex");
mySet.add("Johnny");
mySet.add("Igor");
mySet.add("Bel");
System.out.println(mySet);
mySet2.add("Stuart");
mySet2.add("Alex");
mySet2.add("Johnny");
mySet2.add("Igor");
mySet2.add("Bel");
System.out.println(mySet2);
}
}
İşte programın çıktısı:
Java Küme Yöntemleri
Java Set'in önemli yöntemlerinden bazıları şunlardır :-
boole toplama(E e) . Henüz mevcut değilse, belirtilen öğeyi kümeye ekler (isteğe bağlı işlem).
-
boolean remove(Nesne o) . Varsa, belirtilen öğeyi bu kümeden kaldırır (isteğe bağlı işlem).
-
boolean removeAll(Collection c) . Belirtilen koleksiyonda bulunan tüm öğelerini bu kümeden kaldırır (isteğe bağlı işlem).
-
boolean holdAll(Collection c) . Yalnızca belirtilen koleksiyonda bulunan bu kümedeki öğeleri tutar (isteğe bağlı işlem).
-
geçersiz temizle() . Kümedeki tüm öğeleri kaldırır.
-
yineleyici yineleyici() . Bu kümedeki öğeler üzerinde bir yineleyici döndürür.
-
int boyut() . Kümedeki eleman sayısını almak için kullanılır.
-
boole isEmpty() . Set'in boş olup olmadığını kontrol etmek için.
-
boolean içerir(Nesne o) . Bu Küme belirtilen öğeyi içeriyorsa, true değerini döndürür.
-
yineleyici yineleyici() . Bu kümedeki öğeler üzerinde bir yineleyici döndürür. Öğeler belirli bir sırada döndürülmez.
-
Nesne[] toArray() . Bu kümedeki tüm öğeleri içeren bir dizi döndürür. Bu küme, öğelerinin yineleyici tarafından hangi sırayla döndürüldüğü konusunda herhangi bir garanti veriyorsa, bu yöntem öğeleri aynı sırada döndürmelidir.
Java Set ana işlemler örneği
Bu örnekte, bir dizi dizi oluşturup Arrays.asList işlemini kullanarak bunu mySet'e iletiyoruz . Sonra birkaç öğeyi daha kaldırır ve birkaç tane daha ekleriz. Bu durumda, kümedeki öğelerden biri zaten var: eklenmeyecek. Ayrıca isEmpty() boşluğunu kontrol etme, size() kümesinin boyutunu belirleme ve clear() kümesini tüm öğelerden temizleme işlemlerini deneyeceğiz .
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class HashSetTest2 {
public static void main(String[] args) {
//creating a string Array with some names
String [] friends = {"Stuart", "Ivy", "Johnny", "Alex", "Igor", "Tanya"};
//creating a new set and adding elements from string array into it
Set<String> mySet = new HashSet<>(Arrays.asList(friends));
System.out.println(mySet);
//removing two elements from the set
mySet.remove("Igor");
mySet.remove("Stuart");
System.out.println(mySet);
//adding 2 new Elements into set
mySet.add("Dasha");
mySet.add("Alex"); //it's second Alex, can't be added
System.out.println(mySet);
//cheking the size of mySet
int size = mySet.size();
System.out.println("The quantity of set's elements = " + size);
//Checking if the set is empty
System.out.println("Is mySet empty? " + mySet.isEmpty());
//checking if some elements are in set
System.out.println("Is Igor in set? " + mySet.contains("Igor"));
System.out.println("Is Johnny in set? "+ mySet.contains("Johnny"));
//deleting all elements from the set
mySet.clear();
System.out.println("Is mySet empty now? " + mySet.isEmpty());
}
}
Programın çıktısı burada:
LinkedHashSet ile örnek ve Array olarak ayarlayın
Başka bir program yazalım. İçinde LinkedHashSet'e dayalı bir küme oluşturacağız , ona öğeler ekleyeceğiz ve ardından kümeyi bir diziye dönüştüreceğiz.
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSet3 {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("C");
set.add("D");
set.add("E");
set.add("F");
set.add("G");
set.add("A");
set.add("B");
System.out.println(set);
set.remove("F");// removing an element from our set
set.remove("C sharp");//trying to remove element that isn't in set
System.out.println(set.remove("C sharp"));
System.out.println("Print our set with elements removed: ");
System.out.println(set);
//set to array
String strArray[] = set.toArray(new String[set.size()]);
System.out.println("New Array from set: ");
System.out.println(Arrays.toString(strArray));
System.out.println(strArray[0]);
}
}
İşte programın çıktısı:
Yineleyici ile örnek ayarla
Bir küme oluşturalım, ardından bir yineleyici kullanarak yazdıralım ve ardından yine bir yineleyici kullanarak kümedeki tüm çift sayıları kaldıralım.
import java.util.*;
public class SetTest5
{
public static void main(String[] args)
{
Set<Integer> mySet = new HashSe<>();
for(int i = 0; i < 10; i++)
mySet.add(i);
Iterator iterator = mySet.iterator();
//simple iteration
while(iterator.hasNext()){
int i = (int) iterator.next();
}
System.out.println(" " + mySet);
//modification of mySet using iterator - removing all even numbers
iterator = mySet.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next();
if(x%2 == 0) iterator.remove();
}
System.out.println(mySet);
}
}
Programın çıktısı burada:
TreeSet ile Örnek
Sıralama sizin için önemliyse, TreeSet uygulamasını kullanın. Bu kısa örnekte önceki örneklerde olduğu gibi arkadaşların isimleri ile seti dolduracağız. Ancak, sıralanmış bir TreeSet'te , öğeler hemen sıralı düzende yazılacaktır. Bu durumda, adlar alfabetik olarak görüntülenecektir.
import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
Set mySet = new TreeSet<>();
mySet.add("Stuart");
mySet.add("Alex");
mySet.add("Johnny");
mySet.add("Igor");
mySet.add("Bel");
System.out.println(mySet);
}
Çıktı:
Kısa sonuçlar
-
Java Set arabirimi, Java Collections Framework'ün bir parçasıdır.
-
Uygulanan sınıflar: AbstractSet , ConcurrentHashMap.KeySetView , ConcurrentSkipListSet , CopyOnWriteArraySet , EnumSet , HashSet , JobStateReasons , LinkedHashSet , TreeSet .
-
En popüler Set uygulamaları HashSet , LinkedHashSet ve TreeSet'tir .
-
HashSet öğe sırası, karmaşık bir algoritma tarafından belirlenir. Depolama sırası sizin için önemliyse, karşılaştırma düzeninde artan düzende sıralanan nesneleri depolayan bir TreeSet kabı veya öğeleri ek sırada depolayan bir LinkedHashSet kullanın.
-
Çoğu zaman, kümeler üyeliği test etmek için kullanılır. Yani matematiksel anlamda bir nesnenin verilen bir kümeye ait olup olmadığını kontrol etmek. Bu nedenle , pratikteki tüm Set uygulamalarının çoğunda genellikle HashSet seçilir. Bu uygulama, hızlı arama için optimize edilmiştir.
-
Bir kümeye yinelenen öğeler ekleyemezsiniz, dolayısıyla benzersiz öğeleri depolamak için Set arabiriminin uygulamalarını kullanabilirsiniz .
-
Set, yalnızca bir boş öğe eklemenize izin verir.
-
Küme bir liste değildir ve öğelerinin dizinlerini veya konumlarını desteklemez.
GO TO FULL VERSION