Chào các bạn đã đến với chủ đề tiếp theo của mình. Hôm nay, mình sẽ tiếp tục tìm hiểu về class HashSet trong Java. Ở bài này, mình sẽ đi qua những nội dung như sau:
Nội dung
1. Giới thiệu về HashSet
Trong Java, để thực hiện các thao tác liên quan đến tập hợp, chúng ta sử dụng hashset vì nó cung cấp chức năng của tập hợp trong toán học.
Ví dụ: nếu chúng ta cần lưu trữ các phần tử duy nhất thì tốt nhất là sử dụng hashset bởi vì không giống như Arraylist và LinkedList, hashset không chứa các giá trị trùng lặp.
2. Tạo Hashset
Lớp HashSet
được định nghĩa bên trong package HashSet
, vì vậy để sử dụng lớp, trước tiên chúng ta import package java.util.HashSet
import java.util.HashSet;
Sau khi import package, chúng ta có thể tạo một đối tượng của lớp HashSet
.
HashSet<data type> animals = new HashSet<>();
Trong đó, data type có thể là String, Integer, Double, ….
3. Add phần tử vào Hashset
Để add phần tử vào Hashset, chúng ta dùng 2 phương thức sau:
- add() – chèn phần tử được chỉ định vào set
- addAll() – chèn tất cả các phần tử của collection đã chỉ định vào set
Ví dụ:
class Main {
public static void main(String[] args) {
// create HashSet
HashSet<String> animals = new HashSet<>();
// add elements
animals.add("tiger");
animals.add("dog");
animals.add("elephant");
animals.add("elephant");
// print HashSet
System.out.println("HashSet: " + animals);
// create HashSet
HashSet<String> otherAnimals = new HashSet<>();
// Using addAll() method
otherAnimals.addAll(animals);
otherAnimals.add("Cat");
System.out.println("New HashSet: " + otherAnimals);
}
}
Sau khi chạy đoạn code trên, kết quả được in như sau:
HashSet: [tiger, dog, elephant]
New HashSet: [Cat, tiger, dog, elephant]
Như đã đề cập trước đó, chúng ta không thể lưu các phần tử trùng lặp trong hashset. Trong ví dụ trên, chúng ta đã thêm phần tử elephant
hai lần vào HashSet. Tuy nhiên, phần tử chỉ được lưu một lần bên trong HashSet.
4. Truy cập các phần tử của Hashset
Để truy cập các phần tử của Hashset, chúng ta có thể sử dụng hàm iterator(). Để sử dụng hàm này, chúng ta phải import package java.util.Iterator. Ví dụ:
import java.util.HashSet;
import java.util.Iterator;
class Main {
public static void main(String[] args) {
// create HashSet
HashSet<String> animals = new HashSet<>();
// add elements
animals.add("tiger");
animals.add("dog");
animals.add("elephant");
// print HashSet
System.out.println("HashSet: " + animals);
// Calling iterator() method
Iterator<String> iterate = animals.iterator();
System.out.print("HashSet using Iterator: ");
// Accessing elements
while(iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
Sau khi chạy đoạn code trên, kết quả được in như sau:
HashSet: [tiger, dog, elephant]
HashSet using Iterator: tiger, dog, elephant,
5. Remove phần tử của Hashset
Để remove phần tử trong Hashset, chúng ta dùng 2 phương thức sau:
- remove() – xóa phần tử đã chỉ định khỏi set
- removeAll() – xóa tất cả các phần tử khỏi set
Ví dụ:
import java.util.HashSet;
class Main {
public static void main(String[] args) {
// create HashSet
HashSet<String> animals = new HashSet<>();
// add elements
animals.add("cat");
animals.add("tiger");
animals.add("dog");
animals.add("elephant");
// print HashSet
System.out.println("HashSet: " + animals);
// Using remove() method
animals.remove("dog");
System.out.println("HashSet after removed: " + animals);
// create HashSet
HashSet<String> otherAnimals = new HashSet<>();
otherAnimals.add("cat");
otherAnimals.add("elephant");
// Using removeAll() method
animals.removeAll(otherAnimals);
System.out.println("HashSet after removed all: " + animals);
}
}
Sau khi chạy đoạn code trên, kết quả được in như sau:
HashSet: [cat, tiger, dog, elephant]
HashSet after removed: [cat, tiger, elephant]
HashSet after removed all: [tiger]
6. Lấy phần hợp
Hợp của hai tập hợp là một tập hợp bao gồm tất cả các phần tử của cả hai tập hợp.
Để lấy phần hợp của 2 set, chúng ta có thể sử dụng hàm addAll(). Ví dụ:
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> evenNumbers = new HashSet<>();
evenNumbers.add(2);
evenNumbers.add(4);
System.out.println("HashSet1: " + evenNumbers);
HashSet<Integer> 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);
}
}
Sau khi chạy đoạn code trên, kết quả được in như sau:
HashSet1: [2, 4]
HashSet2: [1, 3]
Union is: [1, 2, 3, 4]
7. Lấy phần giao
Giao của hai tập hợp là một tập hợp bao gồm các phần tử chung cả hai tập hợp.
Để lấy phần giao của 2 set, chúng ta có thể sử dụng hàm retainAll(). Ví dụ:
import java.util.HashSet;
class Main {
public static void main(String[] args) {
// create a HashSet
HashSet<String> domesticAnimals = new HashSet<>();
domesticAnimals.add("dog");
domesticAnimals.add("elephant");
domesticAnimals.add("goat");
// create another HashSet
HashSet<String> wildAnimals = new HashSet<>();
wildAnimals.add("lion");
wildAnimals.add("tiger");
wildAnimals.add("elephant");
// intersection of sets
domesticAnimals.retainAll(wildAnimals);
System.out.println(domesticAnimals);
}
}
Sau khi chạy đoạn code trên, kết quả được in như sau:
[elephant]
8. Tính hiệu của các set
Hiệu của tập hợp A và B là một tập hợp bao gồm các phần tử thuộc A nhưng không thuộc B.
Để tính hiệu hai set, chúng ta có thể sử dụng hàm removeAll(). Ví dụ:
import java.util.HashSet;
class Main {
public static void main(String[] args) {
// create a HashSet
HashSet domesticAnimals = new HashSet<>();
domesticAnimals.add("dog");
domesticAnimals.add("elephant");
domesticAnimals.add("goat");
// create another HashSet
HashSet wildAnimals = new HashSet<>();
wildAnimals.add("lion");
wildAnimals.add("tiger");
wildAnimals.add("elephant");
// difference of sets
domesticAnimals.removeAll(wildAnimals);
System.out.println(domesticAnimals);
}
}
Sau khi chạy đoạn code trên, kết quả được in như sau:
[goat, dog]
9. Tập con
Để kiểm tra xem một set có phải là tập con của set khác hay không, chúng ta có thể sử dụng hàm containsAll(). Ví dụ:
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
System.out.println("HashSet1: " + numbers);
HashSet<Integer> 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);
}
}
Sau khi chạy đoạn code trên, kết quả được in như sau:
HashSet1: [1, 2, 3, 4]
HashSet2: [2, 3]
Is HashSet2 is a subset of HashSet1? true
10. Các hàm khác của Hashset
Hàm | Mô tả |
clone() | Tạo một bản sao của HashSet |
contains() | Tìm kiếm phần tử đã chỉ định trong HashSet 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 |
11. Kết
Như vậy chúng ta đã tìm hiểu xong class HashSet và cách sử dụng nó trong Java. Cảm ơn các bạn đã theo dõi bài viết của mình. Chúc các bạn thành công. Hẹn gặp lại các bạn ở những chủ đề tiếp theo.