Java HashSet

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về lớp Java HashSet. Chúng ta sẽ tìm hiểu về các phương pháp và hoạt động bộ băm khác nhau với sự trợ giúp của các ví dụ.

Các HashSetlớp của framework Java Collections cung cấp các chức năng của cấu trúc dữ liệu bảng băm.

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

Tạo HashSet

Để tạo bộ băm, java.util.HashSettrướ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 bộ băm trong Java.

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

Ở đây, chúng tôi đã tạo một bộ băm có tên numbers.

Chú ý, phần mới HashSet(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 tập hợp băm của chúng ta được lấp đầy 60%, các phần tử sẽ đượ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 bảng băm mà không cần xác định dung lượng và hệ số tải của nó. Ví dụ,

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

Theo mặc định,

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

Phương thức của HashSet

Các HashSetlớp học cung cấp phương pháp khác nhau mà cho phép chúng tôi thực hiện các hoạt động khác nhau trên phim trường.

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

  • add() - chèn phần tử được chỉ định vào tập hợp
  • addAll() - chèn tất cả các phần tử của tập hợp được chỉ định vào tập hợp

Ví dụ,

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

Đầu ra

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

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

Để truy cập các phần tử của tập băm, 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.HashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Calling iterator() method Iterator iterate = numbers.iterator(); System.out.print("HashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Đầu ra

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

Xóa các phần tử

  • remove() - xóa phần tử được chỉ định khỏi tập hợp
  • removeAll() - xóa tất cả các phần tử khỏi tập hợp

Ví dụ,

 import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Using 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

HashSet: (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 HashSetlớ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ộ

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

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

Đầu ra

 HashSet1: (2, 4) HashSet2: (1, 3) Union là: (1, 2, 3, 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.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers); HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) ) 

Đầu ra

 HashSet1: (2, 3) HashSet2: (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.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers); HashSet oddNumbers = new HashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); // Difference between HashSet1 and HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) ) 

Đầu ra

 HashSet1: (2, 3, 5) HashSet2: (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.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is HashSet2 is subset of HashSet1? " + result); ) ) 

Đầu ra

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

Các phương pháp HashSet khác

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

Để tìm hiểu thêm về các phương thức HashSet, hãy truy cập Java HashSet (tài liệu Java chính thức).

Tại sao HashSet?

Trong Java, HashSetthường được sử dụng nếu chúng ta phải truy cập các phần tử một cách ngẫu nhiên. Đó là do các phần tử trong bảng băm được truy cập bằng mã băm.

Mã băm của một phần tử là một nhận dạng duy nhất giúp xác định phần tử trong bảng băm.

HashSetkhông được chứa các phần tử trùng lặp. Do đó, mỗi phần tử tập hợp băm có một mã băm duy nhất.

Lưu ý: HashSet không được đồng bộ hóa. Đó là nếu nhiều luồng truy cập vào tập băm cùng một lúc và một trong các luồng sửa đổi tập băm. Sau đó, nó phải được đồng bộ hóa bên ngoài.

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