CodeGym/Java Blogu/Rastgele/Java'da LinkedHashSet
John Squirrels
Seviye
San Francisco

Java'da LinkedHashSet

grupta yayınlandı
Java'daki LinkedHashSet sınıfından bahsetmişken , Set arayüzünü uyguladığından bahsetmemiz gerekir . LinkedHashSet, öğeleri bir karma tablosunda depolayan ancak HashSet muadilinden farklı olarak öğelerin ekleme sırasını koruyan bir koleksiyon oluşturur.

Java'da Ayarlanan Nedir?

Set arayüzünün bir set (set) tanımladığını kısaca hatırlayalım . Koleksiyonu genişletir ve yinelenen öğelere izin vermeyen koleksiyonların davranışını tanımlar. Bu nedenle, kümeye yinelenen bir öğe eklenmeye çalışılırsa add() yöntemi false döndürür . Arayüz kendi başına herhangi bir ek yöntem tanımlamaz. Set arabirimi , saklanan nesnelerin benzersizliği ile ilgilenir, benzersizlik, equals() yönteminin uygulanmasıyla belirlenir . Bu nedenle, oluşturulan sınıfın nesneleri Set'e eklenecekse , equals() yönteminin geçersiz kılınması istenir .

LinkedHashSet sınıfı

LinkedHashSet sınıfından bahsetmeden önce onun yakın akrabası olan HashSet sınıfından bahsetmemiz gerekir . HashSet, Set arayüzünü uygular . Öğeleri bir karma tabloda depolayan bir koleksiyon oluşturur. Bir karma tablonun öğeleri, anahtar-değer çiftleri olarak saklanır. Anahtar, değeri depolamak için hücreyi (veya segmenti) belirtir. Anahtarın içeriği, karma kod adı verilen benzersiz bir değeri belirlemek için kullanılır. Eşsiz olması gerekmese de hash kodunu bir nesne tanımlayıcısı olarak düşünebiliriz. Bu hash kodu ayrıca, anahtarla ilişkilendirilen verilerin depolandığı bir dizin görevi görür. LinkedHashSet Java sınıfı, HashSet'i herhangi bir yeni yöntem eklemeden genişletir.LinkedHashSet, tıpkı HashSet gibi hızlı bir şekilde bir giriş olup olmadığını kontrol etmenizi sağlar , ancak içinde sıralı bir liste içerir. Bu, öğelerin ekleme sırasını sakladığı anlamına gelir. Başka bir deyişle, LinkedHashSet, eklendikleri sırayla bağlantılı bir set öğeleri listesi tutar. Bu, bir kümeye eklemenin sıralı yinelemesine izin verir. Ancak bu, LinkedHashSet sınıfının HashSet sınıfından daha uzun işlemler gerçekleştirmesine neden olur .

LinkedHashSet'in Önemli Özellikleri

  • Benzersiz öğeleri yalnızca bir LinkedHashSet'te saklayabiliriz

  • LinketHashSet, öğeleri eklediğimiz sırayla çıkarmamıza izin verir

  • LinkedHashSet Senkronize Değil

  • LinkedHashSet, boş öğelerin saklanmasına izin verir

  • LinkedHashSet, öğeleri bir karma koduna dayalı olarak belirtilen bir dizinde depolamak için bir karma tekniği kullanır.

LinkedHashSet Yöntemleri

Üst sınıflarından miras alınan yöntemlere ek olarak, HashSet aşağıdaki yöntemleri tanımlar:
  • boolean add(Object o), belirtilen öğe zaten mevcut değilse bu kümeye ekler.

  • void clear() bu kümedeki tüm öğeleri kaldırır.

  • Object clone(), bu LinkedHashSet örneğinin yüzeysel bir kopyasını döndürür : öğelerin kendileri klonlanmamıştır.

  • boolean include(Object o), bu küme belirtilen öğeyi içeriyorsa, true değerini döndürür.

  • boolean isEmpty(), bu küme hiç öğe içermiyorsa true değerini döndürür .

  • Iterator iterator(), bu kümenin öğeleri üzerinde bir yineleyici döndürür.

  • boolean remove(Object o), varsa belirtilen öğeyi bu kümeden kaldırır.

  • int size(), bu kümedeki öğe sayısını (öğe sayısı) döndürür.

Kolay LinkedHashSet örnekleri Aşağıdaki örnekte, LinkedHashSet nesnesinin başlatılmasını ve kümeyi doldurmak için add() yönteminin kullanıldığını gösteriyoruz.
import java.util.LinkedHashSet;
import java.util.Set;

   public class LinkedHashSetEx1 {
       public static void main(String[] args) {
//LinkedHashSet() Init
Set<String> set = new LinkedHashSet<>();
//adding elements to LinkedHashSet
           set.add("Re"); //first added element
           set.add("Do");
           set.add("Fa");
           set.add("Sol");
           set.add("La");
           set.add("Ti");
           set.add("Mi");//last added element


           System.out.println(set);
       }
   }
Çıktı:
[Re, Do, Fa, Sol, La, Ti, Mi]
Gördüğünüz gibi, kümemizdeki öğeler onları yerleştirdiğimiz sırayla göründü. Java'da LinkedHashSet - 1

Örnek 2. LinkedHashSet'e bir kopya ekleme

LinkedHashSet 7 öğelerimizi müzik notalarının adlarıyla tekrar koyalım ve daha önce yerleştirilen öğelerle aynı olan yeni bir öğe koyalım.
import java.util.LinkedHashSet;
import java.util.Set;

public class LinkedHashSetEx2 {
   public static void main(String[] args) {
           Set<String> set = new LinkedHashSet<>();
           set.add("Re");
           set.add("Do");
           set.add("Fa");
           set.add("Sol");
           set.add("La");
           set.add("Ti");
           set.add("Mi");
           set.add("Sol");
           System.out.println(set);
       }
   }
Programın çıktısı burada:
[Re, Do, Fa, Sol, La, Ti, Mi]
Örnek 2'nin çıktısı birinci örnekteki ile tamamen aynıdır. LinkedHashSet koleksiyonunda iki benzer öğeye sahip olamayız . İkinciyi koymaya çalıştığımızda, sadece yok sayılır.

Örnek 3. LinkedHashSet'ten öğeleri kaldırma

import java.util.LinkedHashSet;
import java.util.Set;
   public class LinkedHashSet3 {
       public static void main(String[] args) {
           Set<String> set = new LinkedHashSet<>();
           set.add("Re");
           set.add("Do");
           set.add("Fa");
           set.add("Sol");
           set.add("La");
           set.add("Ti");
           set.add("Mi");
           System.out.println(set);
           set.remove("Fa");// removing an element from our set
           set.remove("Score");//trying to remove element that isn't in set
           System.out.println(set.remove("Score"));
           System.out.println("Print our set without elements removed: ");
           System.out.println(set);
           set.clear();
           System.out.println("Print out our set after clear command: ");
           System.out.println(set);
       }
   }
Programın çıktısı burada:
[Re, Do, Fa, Sol, La, Ti, Mi] false Kümemizi öğeler kaldırılmadan yazdırın: [Re, Do, Sol, La, Ti, Mi] Açık komuttan sonra kümemizi yazdırın: []
Gördüğünüz gibi, var olmayan bir öğeye uygulanan remove() yöntemi program hatasına neden olmuyor. Öğe kaldırılmamışsa false, öğe LinkedHashSet'teyse ve sonra kaldırılmışsa true döndürür.

LinkedHashSet ve HashSet

Bu iki sınıf yakın akrabadır. Ancak HashSet içinde nesneleri depolamak için HashMap'i kullanırken LinkedHashSet LinkedHashMap'i kullanır . Kampanya sırasını korumanız gerekmiyorsa ancak benzersiz nesneleri depolamanız gerekiyorsa, HashSet kullanmak daha uygundur . Öğelerin ekleme sırasını korumanız gerekiyorsa LinkedHashSet sizin seçiminizdir. LinkedHashSet'in performansı, HashSet'ten biraz daha yavaştır çünkü LinkedHashSet, öğelerin ekleme sırasını korumak için dahili LinkedList'i kullanır . Bir örnek verelim:
import java.util.*;

public class LinkedHashSetExample1 {

   public static void main(String[] args) {
       // while regular hash set orders its elements according to its hashcode stamps

       Set<Integer> regularHashSet = new HashSet<>();
       regularHashSet.add(7);
       regularHashSet.add(3);
       regularHashSet.add(5);
       regularHashSet.add(65536);
       regularHashSet.add(9);
       // few duplicates
       regularHashSet.add(5);
       regularHashSet.add(7);

       // next will print:
       // > regularHashSet = [65536, 3, 5, 7, 9]
       System.out.println("regularHashSet = " + regularHashSet);

       // linked hash set keeps order of adding unchanged

       Set<Integer> linkedHashSet = new LinkedHashSet<>();
       linkedHashSet.add(7);
       linkedHashSet.add(3);
       linkedHashSet.add(5);
       linkedHashSet.add(65536);
       linkedHashSet.add(9);
       // few duplicates
       linkedHashSet.add(5);
       linkedHashSet.add(7);

       // next will print:
       // > linkedHashSet = [7, 3, 5, 65536, 9]
       System.out.println("linkedHashSet = " + linkedHashSet);
   }
}
Programın çıktısı şu şekildedir:
düzenliHashSet = [65536, 3, 5, 7, 9] bağlantılıHashSet = [7, 3, 5, 65536, 9]

Java LinkedHashSet'i gerçek dünya uygulamalarında kullanma

LinkedHashSet hızlı bir şekilde bir giriş olup olmadığını kontrol etmenize izin verdiğinden ve ayrıca siparişi sakladığından, bu koleksiyon bir listeden kopyaları ortadan kaldırmak için oldukça uygun görünüyor. Ya da örneğin, çantamda en son görülen eşya gibi problemleri çözmek. Veya böyle bir oyunu hatırlıyor musunuz, Pokemon Go? LinkedHashSet, karşılaştığınız Pokémonların bir listesini ve yolunuza çıktıkları sırayı saklayabilir. Bu durumda, "tekrarlanan" Pokémon artık listeye eklenmeyecektir. Veya, örneğin, seviyeleri olan herhangi bir oyunda zaten tanıştığınız seviyeye göre patronların bir listesi. Veya kozmik cisimlerin keşfinin tarihi. LinkedHashSetbir uzay gövdesinin listede olup olmadığını hızlı bir şekilde kontrol etmenizi ve orada değilse listeye eklemenizi sağlar. Kopyaları ortadan kaldırmak için bir örnek ele alalım.
import java.util.*;

class LinkedHashSetExample2 {
   public static void main(String[] args) {
       List<String> listWithDuplicates = List.of("some","elements","with", "few", "duplicates", "were", "here", "duplicates", "duplicates");

       Set<String> linkedHashSet = new LinkedHashSet<>(listWithDuplicates);
       List<String> listWithoutDuplicates = new ArrayList<>(linkedHashSet);

       // next will print:
       // > listWithDuplicates = [some, elements, with, few, duplicates, here, duplicates, duplicates]
       System.out.println("listWithDuplicates = " + listWithDuplicates);
       // next will print:
       // > listWithoutDuplicates = [some, elements, with, few, duplicates, here]
       System.out.println("listWithoutDuplicates = " + listWithoutDuplicates);

       // -------------------------------------------------------------------------

       // while using regular Hash Set will generally produces some unexpected order
       Set<String> regularHashSet = new HashSet<>(listWithDuplicates);

       // next will print:
       // > linkedHashSet = [some, elements, with, few, duplicates, were, here]
       System.out.println("linkedHashSet = " + linkedHashSet);
       // next will print:
       // > regularHashSet = [here, some, with, duplicates, were, elements, few]
       System.out.println("regularHashSet = " + regularHashSet);
   }
}
Programın çıktısı burada:
listWithDuplicates = [birkaç yineleme içeren bazı öğeler burada yineleniyor, yineleniyor] listWithoutDuplicates = [birkaç yineleme içeren bazı öğeler buradaydı] linkedHashSet = [birkaç yineleme içeren bazı öğeler , buradaydı] düzenliHashSet = [burada, bazıları, yinelenenlerle, vardı, öğeler, birkaç]
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok