Java LinkedHashSet

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về lớp Java LinkedHashSet và các phương thức của nó với sự trợ giúp của các ví dụ.

Các LinkedHashSetlớp học của khuôn khổ bộ sưu tập Java cung cấp các chức năng của cả hai Hashtable và cấu trúc dữ liệu danh sách liên kết.

Nó thực hiện giao diện Đặt.

Các phần tử của LinkedHashSetđược lưu trữ trong bảng băm tương tự như HashSet.

Tuy nhiên, các bộ băm được liên kết duy trì một danh sách được liên kết kép trong nội bộ cho tất cả các phần tử của nó. Danh sách liên kết xác định thứ tự các phần tử được chèn vào bảng băm.

Tạo LinkedHashSet

Để tạo một tập hợp băm được liên kết, java.util.LinkedHashSettrước tiên chúng ta phải nhập gói.

Sau khi chúng tôi nhập gói, đây là cách chúng tôi có thể tạo các bộ băm được liên kết trong Java.

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

Ở đây, chúng tôi đã tạo một tập hợp băm được liên kết có tên là các số.

Chú ý, phần new LinkedHashSet(8, 0.75). Ở đây, tham số đầu tiên là dung lượng và tham số thứ hai là loadFactor .

  • Dung lượng - Dung lượng của bộ băm này là 8. Có nghĩa là, nó có thể lưu trữ 8 phần tử.
  • loadFactor - Hệ số tải của bộ băm này là 0,6. Điều này có nghĩa là, bất cứ khi nào bảng băm của chúng ta được lấp đầy 60%, các phần tử được chuyển sang một bảng băm mới có kích thước gấp đôi kích thước của bảng băm ban đầu.

Công suất mặc định và hệ số tải

Có thể tạo một tập hợp băm được liên kết mà không cần xác định dung lượng và hệ số tải của nó. Ví dụ,

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

Theo mặc định,

  • dung lượng của bộ băm được liên kết sẽ là 16
  • hệ số tải sẽ là 0,75

Tạo LinkedHashSet từ các Bộ sưu tập khác

Đây là cách chúng ta có thể tạo một tập hợp băm được liên kết chứa tất cả các phần tử của các tập hợp khác.

 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); ) ) 

Đầu ra

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

Phương thức của LinkedHashSet

Các LinkedHashSetlớp học cung cấp phương pháp đó cho phép chúng tôi thực hiện các hoạt động khác nhau trên bộ băm liên kết.

Chèn các phần tử vào LinkedHashSet

  • add() - chèn phần tử được chỉ định vào tập hợp băm được liên kết
  • addAll() - chèn tất cả các phần tử của bộ sưu tập được chỉ định vào bộ băm được liên kết

Ví dụ,

 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); ) ) 

Đầu ra

 LinkedHashSet: (2, 4, 6) LinkedHashSet mới: (2, 4, 6, 5) 

Truy cập các phần tử LinkedHashSet

Để truy cập các phần tử của một tập băm được liên kết, chúng ta có thể sử dụng iterator()phương pháp. Để sử dụng phương pháp này, chúng ta phải nhập java.util.Iteratorgói. Ví dụ,

 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(", "); ) ) ) 

Đầu ra

 LinkedHashSet: (2, 5, 6) LinkedHashSet sử dụng Iterator: 2, 5, 6, 

Ghi chú :

  • hasNext()trả về truenếu có một phần tử tiếp theo trong tập hợp băm được liên kết
  • next() trả về phần tử tiếp theo trong tập băm được liên kết

Xóa các phần tử khỏi HashSet

  • remove() - loại bỏ phần tử được chỉ định khỏi tập hợp băm được liên kết
  • removeAll() - xóa tất cả các phần tử khỏi tập băm được liên kết

Ví dụ,

 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); ) ) 

Đầu ra

LinkedHashSet: (2, 5, 6) 5 có bị xóa không? true Tất cả các phần tử có bị loại bỏ không? thật

Đặt hoạt động

Các phương thức khác nhau của LinkedHashSetlớp cũng có thể được sử dụng để thực hiện các hoạt động tập hợp khác nhau.

Liên hiệp các bộ

Hai thực hiện hợp nhất giữa hai tập hợp, chúng ta có thể sử dụng addAll()phương pháp này. Ví dụ,

 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); ) ) 

Đầu ra

 LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Liên minh là: (1, 3, 2, 4) 

Giao điểm của Bộ

Để thực hiện giao giữa hai tập hợp, chúng ta có thể sử dụng retainAll()phương pháp. Ví dụ

 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); ) ) 

Đầu ra

 LinkedHashSet1: (2, 3) LinkedHashSet2: (2, 4) Giao điểm là: (2) 

Sự khác biệt của các bộ

Để tính toán sự khác biệt giữa hai tập hợp, chúng ta có thể sử dụng removeAll()phương pháp. Ví dụ,

 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); ) ) 

Đầu ra

 LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (1, 3, 5) Sự khác biệt: (2) 

Tập hợp con

Để kiểm tra một tập hợp có phải là tập con của tập hợp khác hay không, chúng ta có thể sử dụng containsAll()phương pháp. Ví dụ,

 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); ) ) 

Đầu ra

LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) LinkedHashSet2 có phải là một tập con của LinkedHashSet1 không? thật

Các phương pháp khác của LinkedHashSet

phương pháp Sự miêu tả
clone() Tạo một bản sao của LinkedHashSet
contains() Tìm kiếm LinkedHashSetphần tử được chỉ định và trả về kết quả boolean
isEmpty() Kiểm tra xem LinkedHashSetcó trống không
size() Trả về kích thước của LinkedHashSet
clear() Loại bỏ tất cả các phần tử khỏi 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:

  • Các TreeSetlớp thực hiện các SortedSetgiao diện. Đó là lý do tại sao các phần tử trong một tập hợp cây được sắp xếp. Tuy nhiên, LinkedHashSetlớp chỉ duy trì thứ tự chèn của các phần tử của nó.
  • A TreeSetthường chậm hơn a LinkedHashSet. Đó là vì bất cứ khi nào một phần tử được thêm vào a TreeSet, nó phải thực hiện thao tác sắp xếp.
  • LinkedHashSetcho phép chèn các giá trị null. Tuy nhiên, chúng ta không thể chèn giá trị null vào TreeSet.

thú vị bài viết...