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 HashSet
lớ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.HashSet
trướ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 HashSet
lớ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ợpaddAll()
- 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.Iterator
gó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ợpremoveAll()
- 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 HashSet
lớ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 HashSet phần tử được chỉ định và trả về kết quả boolean |
isEmpty() | Kiểm tra xem HashSet có 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, HashSet
thườ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.
HashSet
khô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.