Xóa và sao chép
Thuộc phần Logic và luồng chương trình trong hành trình Java của Coddy. Bài học 27 trên 59.
Phương thức clear() xóa tất cả phần tử khỏi HashSet, khiến tập hợp này rỗng.
Phương thức clone() trả về một bản sao nông của HashSet. (Các phần tử không được sao chép.)
Ví dụ, trước tiên hãy tạo một HashSet:
HashSet<String> set = new HashSet<>();
set.add("Coddy");Để sao chép tập hợp:
HashSet<String> clonedSet = (HashSet<String>) set.clone();
System.out.println(clonedSet);
// Đầu ra: [Coddy]Để xóa tập hợp:
set.clear();
System.out.println(set.isEmpty());
// Đầu ra: trueTại sao cần ép kiểu với clone()?
Bạn đã học về ép kiểu với các kiểu nguyên thủy (như int x = (int) 3.14). Khái niệm này cũng áp dụng cho đối tượng, nhưng vì một lý do khác.
Phương thức clone() trả về kiểu Object chung, chứ không phải kiểu HashSet<String> cụ thể. Đó là vì clone() được định nghĩa trong lớp Object và không biết bạn đang sao chép kiểu nào.
// Giá trị clone() trả về:
Object cloneResult = set.clone(); // Trả về Object, không phải HashSet<String>
// Giá trị chúng ta cần:
HashSet<String> clonedSet = (HashSet<String>) set.clone(); // Ép kiểu Object → HashSet<String>Phép ép kiểu (cast) cho Java biết: "Mình biết đối tượng Object này thực ra là một HashSet<String>, nên hãy xem nó như một HashSet<String>."
Nếu không ép kiểu, bạn sẽ gặp lỗi biên dịch vì Java sẽ không tự động chuyển Object thành HashSet<String>.
Thử thách
DễTạo một phương thức có tên processSet nhận một HashSet chứa các chuỗi làm đầu vào. Phương thức cần:
- Sao chép tập hợp.
- Xóa tập hợp ban đầu.
- In tập hợp đã sao chép và kích thước của nó theo định dạng:
Cloned Set: [elements]Cloned Set Size: X - In tập hợp ban đầu (sau khi xóa) và kích thước của nó theo định dạng:
Original Set after clear: [elements]Original Set Size: Y
Tự làm thử
import java.util.HashSet;
import java.util.Scanner;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
@SuppressWarnings("unchecked")
public class Main {
public static void processSet(HashSet<String> set) {
// Viết code của bạn ở đây
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String setString = scanner.nextLine();
Type setType = new TypeToken<HashSet<String>>(){}.getType();
HashSet<String> set = new Gson().fromJson(setString, setType);
processSet(set);
}
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
1Mảng đa chiều
Kiến thức cơ bản về mảng 2DTruy cập phần tử trong mảng 2DVòng lặp lồng nhau với mảng 2DÔn tập về mảng 2DPhép cộng và phép trừ ma trậnMảng không đềuMảng 3D trở lênCác mẫu thường gặp với mảng 2DÔn tập về mảng4HashSet phần 1
HashSet là gì?Thêm một phần tửXóa một phần tửKiểm tra phần tử có tồn tại khôngRỗng và kích thướcXóa và sao chépÔn tập: HashSet2HashMap phần 1
HashMap là gì?Khai báo HashMapTruy cập giá trịKiểm tra khóa có tồn tạiChỉnh sửa từ điểnÔn tập: HashMapTự luyện tập: Trình biên dịch Java online