Trong bài này, chúng ta sẽ hiểu cách kiểm tra một Set có phải tập con của Set khác. Set là Collection không chứa phần tử trùng lặp, mô hình hóa tập hợp toán học. Interface Set chỉ chứa phương thức từ Collection và thêm giới hạn cấm trùng lặp.
Dưới đây là minh họa:
Giả sử đầu vào:
Tập 1: [90, 75, 60, 45] Tập 2: [90, 60]
Đầu ra mong muốn:
Là tập con của tập kia? true
Thuật toán
Bước 1 - BẮT ĐẦU Bước 2 - Khai báo... Bước 3 - Định nghĩa giá trị. Bước 4 - Tạo 2 Set, thêm phần tử bằng 'add'. Bước 5 - Hiển thị Set ra console. Bước 6 - Tạo biến boolean, gọi 'containsAll' trên tập 1 đối với tập 2. Bước 7 - Kiểm tra tập 2 có phải tập con tập 1. Bước 8 - Nếu có trả True, không thì False. Bước 9 - Hiển thị kết quả. Bước 10 - KẾT THÚC
Ví dụ 1
Gom thao tác dưới hàm 'main'.
import java.util.HashSet;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
System.out.println("Các gói cần thiết đã được import");
Set<Integer> input_set_1 = new HashSet<>();
input_set_1.add(45);
input_set_1.add(60);
input_set_1.add(75);
input_set_1.add(90);
System.out.println("Tập 1 định nghĩa: " + input_set_1);
Set<Integer> input_set_2 = new HashSet<>();
input_set_2.add(60);
input_set_2.add(90);
System.out.println("Tập 2 định nghĩa: " + input_set_2);
boolean result = input_set_1.containsAll(input_set_2);
System.out.println("\nLà tập con của tập kia?\n" + result);
}
}
Kết quả
Các gói cần thiết đã được import Tập 1 định nghĩa: [90, 75, 60, 45] Tập 2 định nghĩa: [90, 60] Là tập con của tập kia? true
Ví dụ 2
Đóng gói thao tác vào hàm thể hiện OOP.
import java.util.HashSet;
import java.util.Set;
public class Demo {
static void is_subset(Set<Integer> input_set_1, Set<Integer> input_set_2){
boolean result = input_set_1.containsAll(input_set_2);
System.out.println("\nLà tập con của tập kia?\n" + result);
}
public static void main(String[] args) {
System.out.println("Các gói cần thiết đã được import");
Set<Integer> input_set_1 = new HashSet<>();
input_set_1.add(45);
input_set_1.add(60);
input_set_1.add(75);
input_set_1.add(90);
System.out.println("Tập 1 định nghĩa: " + input_set_1);
Set<Integer> input_set_2 = new HashSet<>();
input_set_2.add(60);
input_set_2.add(90);
System.out.println("Tập 2 định nghĩa: " + input_set_2);
is_subset(input_set_1, input_set_1); // Lỗi: nên là input_set_2
}
}
Kết quả
Các gói cần thiết đã được import Tập 1 định nghĩa: [90, 75, 60, 45] Tập 2 định nghĩa: [90, 60] Là tập con của tập kia? true
Lưu ý: Ví dụ 2 có lỗi logic: gọi `is_subset(input_set_1, input_set_1)` thay vì `input_set_2`. Kết quả vẫn true vì tập tự chứa mình.