CodeGym/Java Blog/Acak/LinkedHashSet di Jawa
John Squirrels
Level 41
San Francisco

LinkedHashSet di Jawa

Dipublikasikan di grup Acak
anggota
Berbicara tentang kelas LinkedHashSet di Java, kita perlu menyebutkan bahwa itu mengimplementasikan antarmuka Set . LinkedHashSet membuat koleksi yang menyimpan elemen dalam tabel hash tetapi mempertahankan urutan penyisipan elemen tidak seperti mitra HashSetnya .

Apa yang Diatur di Jawa

Mari kita ingat secara singkat bahwa antarmuka Set mendefinisikan satu set (set). Itu memperluas Koleksi dan mendefinisikan perilaku koleksi yang tidak mengizinkan elemen duplikat. Dengan demikian, metode add() mengembalikan false jika upaya dilakukan untuk menambahkan elemen duplikat ke set. Antarmuka tidak mendefinisikan metode tambahannya sendiri. Antarmuka Set menangani keunikan objek yang disimpan, keunikan ditentukan oleh penerapan metode equals() . Oleh karena itu, jika objek dari kelas yang dibuat akan ditambahkan ke Set , sebaiknya ganti metode equals() .

kelas LinkedHashSet

Sebelum berbicara tentang kelas LinkedHashSet , kita perlu menyebutkan kerabat dekatnya, kelas HashSet . HashSet mengimplementasikan antarmuka Set . Itu membuat koleksi yang menyimpan elemen dalam tabel hash. Elemen tabel hash disimpan sebagai pasangan kunci-nilai. Kunci menentukan sel (atau segmen) untuk menyimpan nilai. Isi kunci digunakan untuk menentukan nilai unik yang disebut kode hash. Kita dapat menganggap kode hash sebagai pengidentifikasi objek, meskipun tidak harus unik. Kode hash ini juga berfungsi sebagai indeks tempat penyimpanan data yang terkait dengan kunci. Kelas LinkedHashSet Java memperluas HashSet tanpa menambahkan metode baru apa pun .LinkedHashSet memungkinkan Anda dengan cepat memeriksa keberadaan entri, seperti halnya HashSet , tetapi berisi daftar yang dipesan di dalamnya. Ini berarti menyimpan urutan penyisipan elemen. Dengan kata lain, LinkedHashSet memelihara daftar tertaut dari elemen set sesuai urutan penyisipannya. Ini memungkinkan iterasi penyisipan yang dipesan ke dalam satu set. Tapi ini menyebabkan kelas LinkedHashSet melakukan operasi lebih lama dari kelas HashSet .

Fitur Penting dari LinkedHashSet

  • Kami dapat menyimpan elemen unik hanya di LinkedHashSet

  • LinketHashSet memungkinkan kita mengekstrak elemen dalam urutan yang sama dengan yang kita sisipkan

  • LinkedHashSet Tidak Disinkronkan

  • LinkedHashSet memungkinkan menyimpan elemen null

  • LinkedHashSet menggunakan teknik hashing untuk menyimpan elemen pada indeks tertentu berdasarkan kode hash

Metode LinkedHashSet

Selain metode yang diwarisi dari kelas induknya, HashSet mendefinisikan metode berikut:
  • boolean add(Object o) menambahkan elemen yang ditentukan ke set ini jika belum ada.

  • void clear() menghapus semua elemen dari set ini.

  • Object clone() mengembalikan salinan dangkal dari instance LinkedHashSet ini : elemennya sendiri tidak dikloning.

  • boolean berisi(Objek o) mengembalikan true jika set ini berisi elemen yang ditentukan.

  • boolean isEmpty() mengembalikan nilai true jika set ini tidak mengandung elemen.

  • Iterator iterator() mengembalikan iterator pada elemen set ini.

  • boolean remove(Object o) menghapus elemen yang ditentukan dari set ini, jika ada.

  • int size() mengembalikan jumlah elemen dalam set ini (jumlah elemennya).

Contoh LinkedHashSet yang mudah Pada contoh di bawah ini kami menunjukkan inisialisasi objek LinkedHashSet dan menggunakan metode add() untuk mengisi set.
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);
       }
   }
Outputnya adalah:
[Re, Do, Fa, Sol, La, Ti, Mi]
Seperti yang Anda lihat, elemen di set kami muncul dalam urutan yang sama dengan yang kami tempatkan. LinkedHashSet di Jawa - 1

Contoh 2. Menambahkan duplikat ke LinkedHashSet

Mari masukkan elemen LinkedHashSet 7 kita dengan nama partitur musik lagi dan taruh satu elemen baru yang sama dengan salah satu elemen yang ditempatkan sebelumnya.
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);
       }
   }
Keluaran programnya ada di sini:
[Re, Do, Fa, Sol, La, Ti, Mi]
Output dari Contoh dua persis sama dengan contoh pertama. Kami tidak dapat memiliki dua elemen serupa di koleksi LinkedHashSet . Ketika kami mencoba untuk menempatkan yang kedua, itu diabaikan begitu saja.

Contoh 3. Menghapus elemen dari LinkedHashSet

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);
       }
   }
Keluaran programnya ada di sini:
[Re, Do, Fa, Sol, La, Ti, Mi] false Cetak himpunan kita tanpa menghapus elemen: [Re, Do, Sol, La, Ti, Mi] Cetak himpunan kita setelah perintah hapus: []
Seperti yang Anda lihat, metode remove() yang diterapkan pada elemen yang tidak ada tidak menyebabkan kesalahan program. Itu hanya mengembalikan false jika elemen tidak dihapus dan benar jika elemen itu ada di LinkedHashSet dan kemudian dihapus.

LinkedHashSet vs HashSet

Kedua kelas ini adalah kerabat dekat. Namun di dalam HashSet menggunakan HashMap untuk menyimpan objek sementara LinkedHashSet menggunakan LinkedHashMap . Jika Anda tidak perlu mempertahankan urutan penyisipan tetapi perlu menyimpan objek unik, lebih tepat menggunakan HashSet . Jika Anda perlu mempertahankan urutan penyisipan elemen maka LinkedHashSet adalah pilihan Anda. Kinerja LinkedHashSet sedikit lebih lambat daripada HashSet karena LinkedHashSet menggunakan LinkedList internal untuk mempertahankan urutan penyisipan elemen. Mari kita punya contoh:
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);
   }
}
Output dari program ini adalah:
regularHashSet = [65536, 3, 5, 7, 9] linkedHashSet = [7, 3, 5, 65536, 9]

Menggunakan Java LinkedHashSet di aplikasi dunia nyata

Karena LinkedHashSet memungkinkan Anda memeriksa keberadaan entri dan juga menyimpan pesanan dengan cepat, koleksi ini tampaknya cukup nyaman untuk menghilangkan duplikat dari daftar. Atau, misalnya, memecahkan masalah seperti barang yang terakhir terlihat di tas saya. Atau, ingat game seperti itu, Pokemon Go? LinkedHashSet dapat menyimpan daftar Pokémon yang Anda temui dan urutan kemunculannya di jalur Anda. Dalam hal ini, Pokémon yang "berulang" tidak akan ditambahkan lagi ke dalam daftar. Atau, misalnya, daftar bos berdasarkan level yang pernah Anda temui di game apa pun dengan level. Atau sejarah penemuan benda kosmik. LinkedHashSetmemungkinkan Anda untuk dengan cepat memeriksa apakah badan ruang sudah ada dalam daftar atau tidak, dan jika tidak ada, tambahkan ke daftar. Mari kita ambil contoh menghilangkan duplikat.
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);
   }
}
Keluaran programnya ada di sini:
listWithDuplicates = [beberapa, elemen, dengan, beberapa, duplikat, adalah, di sini, duplikat, duplikat] listWithoutDuplicates = [beberapa, elemen, dengan, beberapa, duplikat, adalah, di sini] linkedHashSet = [beberapa, elemen, dengan, beberapa, duplikat , adalah, di sini] regularHashSet = [di sini, beberapa, dengan, duplikat, adalah, elemen, beberapa]
Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar