Java LinkedHashSet

Dalam tutorial ini, kita akan belajar mengenai kelas Java LinkedHashSet dan kaedahnya dengan bantuan contoh.

The LinkedHashSetkelas rangka koleksi Java memberikan fungsi kedua-dua hashtable dan struktur senarai data yang dipautkan.

Ia melaksanakan antara muka Set.

Elemen LinkedHashSetdisimpan dalam jadual hash yang serupa dengan HashSet.

Walau bagaimanapun, set hash terpaut mengekalkan senarai dua kali ganda secara dalaman untuk semua elemennya. Senarai terpaut menentukan urutan elemen dimasukkan ke dalam jadual hash.

Buat LinkedHashSet

Untuk membuat set hash terpaut, kita mesti mengimport java.util.LinkedHashSetpakej terlebih dahulu.

Setelah kami mengimport pakej, berikut adalah bagaimana kita dapat membuat set hash terpaut di Java.

 // LinkedHashSet with 8 capacity and 0.75 load factor LinkedHashSet numbers = new LinkedHashSet(8, 0.75); 

Di sini, kami telah membuat set hash terpaut bernama nombor.

Perhatikan, bahagiannya new LinkedHashSet(8, 0.75). Di sini, parameter pertama adalah kapasiti dan parameter kedua adalah loadFactor .

  • kapasiti - Kapasiti set hash ini adalah 8. Maksudnya, ia dapat menyimpan 8 elemen.
  • loadFactor - Faktor beban set hash ini ialah 0.6. Ini bermaksud, setiap kali jadual hash kami diisi sebanyak 60%, unsur-unsur dipindahkan ke jadual hash baru dua kali ganda dari ukuran meja hash asal.

Kapasiti lalai dan faktor beban

Anda boleh membuat set hash terpaut tanpa menentukan kapasiti dan faktor muatannya. Sebagai contoh,

 // LinkedHashSet with default capacity and load factor LinkedHashSet numbers1 = new LinkedHashSet(); 

Secara lalai,

  • kapasiti set hash terpaut akan menjadi 16
  • faktor beban akan menjadi 0.75

Membuat LinkedHashSet dari Koleksi Lain

Inilah cara kita dapat membuat set hash terpaut yang mengandungi semua elemen koleksi lain.

 import java.util.LinkedHashSet; import java.util.ArrayList; class Main ( public static void main(String() args) ( // Creating an arrayList of even numbers ArrayList evenNumbers = new ArrayList(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("ArrayList: " + evenNumbers); // Creating a LinkedHashSet from an ArrayList LinkedHashSet numbers = new LinkedHashSet(evenNumbers); System.out.println("LinkedHashSet: " + numbers); ) ) 

Pengeluaran

 ArrayList: (2, 4) LinkedHashSet: (2, 4) 

Kaedah LinkedHashSet

The LinkedHashSetkelas menyediakan kaedah yang membolehkan kita untuk melakukan pelbagai operasi pada set hash yang dipautkan.

Masukkan Elemen ke LinkedHashSet

  • add() - memasukkan elemen yang ditentukan ke set hash terpaut
  • addAll() - memasukkan semua elemen koleksi yang ditentukan ke set hash terpaut

Sebagai contoh,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet evenNumber = new LinkedHashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("LinkedHashSet: " + evenNumber); LinkedHashSet numbers = new LinkedHashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New LinkedHashSet: " + numbers); ) ) 

Pengeluaran

 LinkedHashSet: (2, 4, 6) LinkedHashSet Baru: (2, 4, 6, 5) 

Akses Elemen LinkedHashSet

Untuk mengakses elemen set hash terpaut, kita dapat menggunakan iterator()kaedahnya. Untuk menggunakan kaedah ini, kita mesti mengimport java.util.Iteratorpakej. Sebagai contoh,

 import java.util.LinkedHashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // Calling the iterator() method Iterator iterate = numbers.iterator(); System.out.print("LinkedHashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Pengeluaran

 LinkedHashSet: (2, 5, 6) LinkedHashSet menggunakan Iterator: 2, 5, 6, 

Nota :

  • hasNext()kembali truejika terdapat elemen seterusnya dalam set hash yang dipautkan
  • next() mengembalikan elemen seterusnya dalam set hash terpaut

Keluarkan Elemen dari HashSet

  • remove() - mengeluarkan elemen yang ditentukan dari set hash terpaut
  • removeAll() - membuang semua elemen dari set hash terpaut

Sebagai contoh,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // Using the remove() method boolean value1 = numbers.remove(5); System.out.println("Is 5 removed? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("Are all elements removed? " + value2); ) ) 

Pengeluaran

LinkedHashSet: (2, 5, 6) Adakah 5 dikeluarkan? benar Adakah semua unsur dikeluarkan? benar

Tetapkan Operasi

Pelbagai kaedah LinkedHashSetkelas juga boleh digunakan untuk melakukan pelbagai operasi set.

Kesatuan Set

Dua melakukan penyatuan antara dua set, kita boleh menggunakan addAll()kaedahnya. Sebagai contoh,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet evenNumbers = new LinkedHashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet1: " + evenNumbers); LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(3); System.out.println("LinkedHashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) ) 

Pengeluaran

 LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Kesatuan adalah: (1, 3, 2, 4) 

Persimpangan Set

Untuk melakukan persimpangan antara dua set, kita boleh menggunakan retainAll()kaedahnya. Sebagai contoh

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet evenNumbers = new LinkedHashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) ) 

Pengeluaran

 LinkedHashSet1: (2, 3) LinkedHashSet2: (2, 4) Persimpangan adalah: (2) 

Perbezaan Set

Untuk mengira perbezaan antara dua set, kita boleh menggunakan removeAll()kaedahnya. Sebagai contoh,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet oddNumbers = new LinkedHashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("LinkedHashSet2: " + oddNumbers); // Difference between LinkedHashSet1 and LinkedHashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) ) 

Pengeluaran

 LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (1, 3, 5) Perbezaan: (2) 

Subset

Untuk memeriksa sama ada set adalah subset dari set lain atau tidak, kita boleh menggunakan containsAll()kaedahnya. Sebagai contoh,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("LinkedHashSet1: " + numbers); LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is LinkedHashSet2 is subset of LinkedHashSet1? " + result); ) ) 

Pengeluaran

LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) Adakah LinkedHashSet2 adalah subset LinkedHashSet1? benar

Kaedah Lain LinkedHashSet

Kaedah Penerangan
clone() Membuat salinan LinkedHashSet
contains() Mencari LinkedHashSetelemen yang ditentukan dan mengembalikan hasil boolean
isEmpty() Memeriksa jika LinkedHashSetkosong
size() Mengembalikan ukuran LinkedHashSet
clear() Mengeluarkan semua elemen dari LinkedHashSet

To learn more about LinkedHashSet methods, visit Java LinkedHashSet (official Java documentation).

LinkedHashSet Vs. HashSet

Both LinkedHashSet and HashSet implements the Set interface. However, there exist some differences between them.

  • LinkedHashSet maintains a linked list internally. Due to this, it maintains the insertion order of its elements.
  • The LinkedHashSet class requires more storage than HashSet. This is because LinkedHashSet maintains linked lists internally.
  • The performance of LinkedHashSet is slower than HashSet. It is because of linked lists present in LinkedHashSet.

LinkedHashSet Vs. TreeSet

Here are the major differences between LinkedHashSet and TreeSet:

  • The TreeSetkelas melaksanakan SortedSetantara muka. Itulah sebabnya elemen dalam set pokok disusun. Walau bagaimanapun, LinkedHashSetkelas hanya mengekalkan susunan kemasukan unsur-unsurnya.
  • A TreeSetbiasanya lebih perlahan daripada a LinkedHashSet. Ini kerana setiap kali elemen ditambahkan ke TreeSet, harus melakukan operasi penyortiran.
  • LinkedHashSetmembenarkan penyisipan nilai nol. Namun, kami tidak dapat memasukkan nilai nol ke TreeSet.

Artikel menarik...