Menu
CoddyTech

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: true

Tạ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>.

challenge icon

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:

  1. Sao chép tập hợp.
  2. Xóa tập hợp ban đầu.
  3. 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
  4. 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);
    }
}
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch Java online