CodeGym/Blog Java/rawak/LinkedHashSet dalam Java
John Squirrels
Tahap
San Francisco

LinkedHashSet dalam Java

Diterbitkan dalam kumpulan
Bercakap tentang kelas LinkedHashSet di Java, kita perlu menyebut bahawa ia melaksanakan antara muka Set . LinkedHashSet mencipta koleksi yang menyimpan elemen dalam jadual cincang tetapi mengekalkan susunan sisipan elemen tidak seperti rakan sejawatnya HashSet .

Apa yang Ditetapkan di Jawa

Mari kita ingat secara ringkas bahawa antara muka Set mentakrifkan set (set). Ia memanjangkan Koleksi dan mentakrifkan gelagat koleksi yang tidak membenarkan unsur pendua. Oleh itu, kaedah add() mengembalikan palsu jika percubaan dibuat untuk menambah elemen pendua pada set. Antara muka tidak mentakrifkan sebarang kaedah tambahan sendiri. Antara muka Set menjaga keunikan objek yang disimpan, keunikan ditentukan oleh pelaksanaan kaedah equals() . Oleh itu, jika objek kelas yang dicipta akan ditambahkan pada Set , adalah wajar untuk mengatasi kaedah equals() .

Kelas LinkedHashSet

Sebelum bercakap tentang kelas LinkedHashSet , kita perlu menyebut saudara terdekatnya, kelas HashSet . HashSet melaksanakan antara muka Set . Ia mencipta koleksi yang menyimpan elemen dalam jadual cincang. Unsur-unsur jadual cincang disimpan sebagai pasangan nilai kunci. Kekunci menentukan sel (atau segmen) untuk menyimpan nilai. Kandungan kunci digunakan untuk menentukan nilai unik yang dipanggil kod cincang. Kita boleh memikirkan kod cincang sebagai pengecam objek, walaupun ia tidak semestinya unik. Kod cincang ini juga berfungsi sebagai indeks yang mana data yang dikaitkan dengan kunci disimpan. Kelas Java LinkedHashSet memanjangkan HashSet tanpa menambah sebarang kaedah baharu.LinkedHashSet membolehkan anda menyemak dengan cepat kewujudan entri, sama seperti HashSet , tetapi mengandungi senarai tersusun di dalamnya. Ini bermakna ia menyimpan susunan sisipan elemen. Dalam erti kata lain, LinkedHashSet mengekalkan senarai terpaut elemen set dalam susunan ia dimasukkan. Ini membenarkan lelaran tertib pemasukan ke dalam set. Tetapi ini menyebabkan kelas LinkedHashSet melaksanakan operasi lebih lama daripada kelas HashSet .

Ciri Penting LinkedHashSet

  • Kami boleh menyimpan elemen unik hanya dalam LinkedHashSet

  • LinketHashSet membolehkan kami mengekstrak elemen dalam susunan yang sama yang kami masukkan

  • LinkedHashSet Tidak Disegerakkan

  • LinkedHashSet membenarkan menyimpan unsur nol

  • LinkedHashSet menggunakan teknik pencincangan untuk menyimpan elemen pada indeks tertentu berdasarkan kod cincang

Kaedah LinkedHashSet

Sebagai tambahan kepada kaedah yang diwarisi daripada kelas induknya, HashSet mentakrifkan kaedah berikut:
  • boolean add(Object o) menambah elemen yang ditentukan pada set ini jika ia belum ada.

  • void clear() mengalih keluar semua elemen daripada set ini.

  • Klon objek() mengembalikan salinan cetek contoh LinkedHashSet ini : elemen itu sendiri tidak diklon.

  • boolean mengandungi(Objek o) mengembalikan benar jika set ini mengandungi elemen yang ditentukan.

  • boolean isEmpty() mengembalikan benar jika set ini tidak mengandungi unsur.

  • Iterator iterator() mengembalikan iterator ke atas elemen set ini.

  • boolean remove(Object o) mengalih keluar elemen yang ditentukan daripada set ini, jika ada.

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

Contoh LinkedHashSet MudahDalam contoh di bawah kami menunjukkan pemulaan objek LinkedHashSet dan menggunakan kaedah add() untuk mengisi set itu.
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 ialah:
[Re, Do, Fa, Sol, La, Ti, Mi]
Seperti yang anda lihat, elemen dalam set kami muncul dalam susunan yang sama yang kami letakkan. LinkedHashSet dalam Java - 1

Contoh 2. Menambah pendua ke dalam LinkedHashSet

Mari masukkan elemen LinkedHashSet 7 kami dengan nama skor muzik sekali lagi dan letakkan satu elemen baharu yang sama seperti salah satu elemen yang diletakkan sebelum ini.
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);
       }
   }
Output program ada di sini:
[Re, Do, Fa, Sol, La, Ti, Mi]
Output Contoh dua adalah sama seperti dalam contoh pertama. Kami tidak boleh mempunyai dua elemen serupa dalam koleksi LinkedHashSet . Apabila kita cuba meletakkan yang kedua, ia hanya diabaikan.

Contoh 3. Mengalih keluar elemen daripada 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);
       }
   }
Output program ada di sini:
[Re, Do, Fa, Sol, La, Ti, Mi] false Cetak set kami tanpa elemen dialih keluar: [Re, Do, Sol, La, Ti, Mi] Cetak set kami selepas arahan yang jelas: []
Seperti yang anda lihat, kaedah remove() yang digunakan pada elemen yang tidak wujud tidak mengakibatkan ralat program. Ia hanya mengembalikan palsu jika elemen tidak dialih keluar dan benar jika elemen itu berada dalam LinkedHashSet dan kemudian dialih keluar.

LinkedHashSet lwn HashSet

Kedua-dua kelas ini adalah saudara terdekat. Walau bagaimanapun di dalam HashSet ia menggunakan HashMap untuk menyimpan objek manakala LinkedHashSet menggunakan LinkedHashMap . Jika anda tidak perlu mengekalkan susunan sisipan tetapi perlu menyimpan objek unik, adalah lebih sesuai untuk menggunakan HashSet . Jika anda perlu mengekalkan susunan sisipan elemen maka LinkedHashSet ialah pilihan anda. Prestasi LinkedHashSet adalah lebih perlahan daripada HashSet kerana LinkedHashSet menggunakan LinkedList dalaman untuk mengekalkan susunan sisipan elemen. Mari kita ambil 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 program ialah:
regularHashSet = [65536, 3, 5, 7, 9] linkedHashSet = [7, 3, 5, 65536, 9]

Menggunakan Java LinkedHashSet dalam aplikasi dunia sebenar

Memandangkan LinkedHashSet membolehkan anda menyemak dengan cepat kewujudan entri dan juga menyimpan pesanan, koleksi ini nampaknya agak mudah untuk menghapuskan pendua daripada senarai. Atau, sebagai contoh, menyelesaikan masalah seperti item terakhir dilihat dalam beg saya. Atau, ingat permainan seperti itu, Pokemon Go? LinkedHashSet boleh menyimpan senarai Pokémon yang anda temui dan susunan yang mereka temui di laluan anda. Dalam kes ini, Pokémon "berulang" tidak lagi akan ditambahkan pada senarai. Atau, sebagai contoh, senarai bos mengikut tahap yang telah anda temui dalam mana-mana permainan dengan tahap. Atau sejarah penemuan badan kosmik. LinkedHashSetmembolehkan anda menyemak dengan cepat sama ada badan ruang sudah ada dalam senarai atau tidak, dan jika tiada, kemudian tambahkannya pada senarai. Mari kita ambil contoh menghapuskan pendua.
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);
   }
}
Output program ada di sini:
listWithDuplicates = [beberapa, elemen, dengan, sedikit, pendua, adalah, di sini, pendua, pendua] listWithoutDuplicates = [beberapa, elemen, dengan, beberapa, pendua, adalah, di sini] linkedHashSet = [beberapa, elemen, dengan, beberapa, pendua , were, here] regularHashSet = [di sini, beberapa, dengan, pendua, adalah, elemen, sedikit]
Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi