John Squirrels
Seviye
San Francisco

java seti

grupta yayınlandı
Set, Java Collection Framework'deki bir arabirimdir. Sırasız koleksiyonları benzersiz öğelerle uygulamak için Java Set'i kullanabilirsiniz . Bu yazımızda bu arayüze ve onun Java dilindeki uygulamalarına, setlerle çalışma metodlarına bakacağız ve ayrıca bazı örnekler vereceğiz.

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ı:
[Alex, Igor, Stuart, Johnny, Bel] [Stuart, Alex, Johnny, Igor, Bel]
Yukarıda belirttiğimiz gibi, HashSet öğelerin sırasını sağlamaz, ancak LinkedHashSet tutar. Öğeleri kümeye yazdığımız sırayla bize veren LinkedHashSet'ti .

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.

Yöntemler, ArrayList'inkine benzer , ancak add(Object o) yöntemi, kümeye yalnızca zaten orada değilse bir nesne ekler. Yöntemin dönüş değeri, nesne eklendiyse true, aksi takdirde false olur. Collection<> Arayüzünden miras alınan bazı yöntemler de vardır : parallelStream() , removeIf() , stream() ve java.lang.Iterable Arayüzünden miras alınan forEach() yöntemi .

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:
[Alex, Igor, Stuart, Tanya, Johnny, Ivy] [Alex, Tanya, Johnny, Ivy] [Alex, Dasha, Tanya, Johnny, Ivy] Kümenin eleman sayısı = 5 mySet boş mu? false Igor sette mi? false Johnny sette mi? true mySet şimdi boş mu? doğru

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ı:
[C, D, E, F, G, A, B] false Öğeleri çıkarılmış olarak kümemizi yazdırın: [C, D, E, G, A, B] Kümeden yeni dizi: [C, D, E, G, A, B] C

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:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 3, 5, 7, 9

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ı:
[Alex, Bel, Igor, Johnny, Stuart]

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.

Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok