Lớp WeakHashMap trong Java: Hướng dẫn cho người mới bắt đầu
Giới thiệu
Xin chào các bạn, những nhà lập trình Java tương lai! Hôm nay, chúng ta sẽ đào sâu vào thế giới thú vị của WeakHashMap trong Java. Đừng lo nếu bạn chưa từng nghe về nó - chúng ta sẽ bắt đầu từ đầu và dần dần tiến triển. Bằng cách kết thúc hướng dẫn này, bạn sẽ trở thành một chuyên gia WeakHashMap!
WeakHashMap là gì?
Hãy tưởng tượng bạn đang tổ chức một buổi tiệc lớn, và bạn có một danh sách khách mời. Nhưng đây không phải là danh sách khách mời bình thường - đây là một danh sách ma thuật tự động loại bỏ những người không thể tham gia nữa. Đó là một chút như điều gì WeakHashMap làm trong Java, nhưng với các đối tượng thay vì khách mời buổi tiệc!
WeakHashMap là một loại đặc biệt của Map trong Java, cho phép các khóa của nó được thu hồi rác khi họ không còn được sử dụng nào nữa trong chương trình của bạn. Điều này có thể rất hữu ích khi bạn muốn tạo một bộ nhớ tạm thời mà không ngăn cản các đối tượng bị xóa khi không còn cần thiết.
Khai báo lớp
Hãy bắt đầu bằng cách nhìn thấy cách chúng ta khai báo một WeakHashMap:
import java.util.WeakHashMap;
public class WeakHashMapExample {
public static void main(String[] args) {
WeakHashMap<String, Integer> myWeakMap = new WeakHashMap<>();
}
}
Trong ví dụ này, chúng ta đang tạo một WeakHashMap sử dụng các đối tượng String làm khóa và các đối tượng Integer làm giá trị. Phần <String, Integer>
được gọi là "generics" - như là việc kể Java loại đối tượng mà chúng ta muốn lưu trữ trong bản đồ của mình.
Các khởi tạo của lớp
WeakHashMap có bốn khởi tạo khác nhau. Hãy nhìn thấy mỗi khởi tạo:
-
Khởi tạo mặc định:
WeakHashMap<String, Integer> map1 = new WeakHashMap<>();
Điều này tạo ra một WeakHashMap trống với khả năng khởi tạo mặc định (16) và hệ số tải (0.75).
-
Khởi tạo với khả năng khởi tạo:
WeakHashMap<String, Integer> map2 = new WeakHashMap<>(100);
Điều này tạo ra một WeakHashMap với khả năng khởi tạo cụ thể và hệ số tải mặc định.
-
Khởi tạo với khả năng khởi tạo và hệ số tải:
WeakHashMap<String, Integer> map3 = new WeakHashMap<>(100, 0.8f);
Điều này tạo ra một WeakHashMap với khả năng khởi tạo và hệ số tải cụ thể.
-
Khởi tạo với một Map khác:
Map<String, Integer> existingMap = new HashMap<>(); existingMap.put("Alice", 25); existingMap.put("Bob", 30); WeakHashMap<String, Integer> map4 = new WeakHashMap<>(existingMap);
Điều này tạo ra một WeakHashMap với các ánh xạ tương tự như Map được chỉ định.
Các phương thức của lớp
WeakHashMap cung cấp một số phương thức để thao tác và truy cập nội dung của nó. Dưới đây là bảng một số phương thức thường được sử dụng nhất:
Phương thức | Mô tả |
---|---|
put(K key, V value) | Thêm một cặp khóa-giá trị vào bản đồ |
get(Object key) | Truy xuất giá trị liên kết với khóa cụ thể |
remove(Object key) | Loại bỏ ánh xạ cho khóa cụ thể |
size() | Trả về số lượng các ánh xạ khóa-giá trị trong bản đồ |
clear() | Loại bỏ tất cả các ánh xạ khỏi bản đồ |
containsKey(Object key) | Trả về true nếu bản đồ chứa khóa cụ thể |
containsValue(Object value) | Trả về true nếu bản đồ chứa giá trị cụ thể |
isEmpty() | Trả về true nếu bản đồ không chứa các ánh xạ khóa-giá trị |
Hãy xem một số phương thức này hoạt động:
WeakHashMap<String, Integer> ageMap = new WeakHashMap<>();
// Thêm các cặp khóa-giá trị
ageMap.put("Alice", 25);
ageMap.put("Bob", 30);
ageMap.put("Charlie", 35);
// Truy xuất giá trị
System.out.println("Tuổi của Alice: " + ageMap.get("Alice")); // Output: Tuổi của Alice: 25
// Kiểm tra nếu khóa tồn tại
System.out.println("David có trong bản đồ không? " + ageMap.containsKey("David")); // Output: David có trong bản đồ không? false
// Loại bỏ một cặp khóa-giá trị
ageMap.remove("Bob");
System.out.println("Kích thước bản đồ sau khi loại bỏ Bob: " + ageMap.size()); // Output: Kích thước bản đồ sau khi loại bỏ Bob: 2
// Xóa bản đồ
ageMap.clear();
System.out.println("Bản đồ có trống không? " + ageMap.isEmpty()); // Output: Bản đồ có trống không? true
Các phương thức kế thừa
WeakHashMap kế thừa các phương thức từ các lớp và giao diện cha mẹ. Dưới đây là một số phương thức quan trọng kế thừa:
Kế thừa từ | Các phương thức |
---|---|
java.util.AbstractMap | clone(), equals(), hashCode(), toString() |
java.util.Map | entrySet(), keySet(), values() |
java.lang.Object | finalize(), getClass(), notify(), notifyAll(), wait() |
Ví dụ thêm một cặp khóa-giá trị vào WeakHashMap của cặp Integer, Integer
Bây giờ, hãy nhìn thấy một ví dụ hoàn chỉnh hơn về việc sử dụng WeakHashMap với các khóa và giá trị Integer:
import java.util.WeakHashMap;
public class WeakHashMapExample {
public static void main(String[] args) {
WeakHashMap<Integer, Integer> squareMap = new WeakHashMap<>();
// Thêm các cặp khóa-giá trị
for (int i = 1; i <= 5; i++) {
squareMap.put(i, i * i);
}
System.out.println("Bản đồ ban đầu: " + squareMap);
// Truy cập giá trị
System.out.println("Bình phương của 3: " + squareMap.get(3));
// Loại bỏ một cặp khóa-giá trị
squareMap.remove(2);
System.out.println("Bản đồ sau khi loại bỏ 2: " + squareMap);
// Kiểm tra nếu khóa tồn tại
System.out.println("Bản đồ có chứa 4 không? " + squareMap.containsKey(4));
// Kiểm tra nếu giá trị tồn tại
System.out.println("Bản đồ có chứa giá trị 16 không? " + squareMap.containsValue(16));
// Duyệt qua bản đồ
System.out.println("Duyệt qua bản đồ:");
for (Integer key : squareMap.keySet()) {
System.out.println("Khóa: " + key + ", Giá trị: " + squareMap.get(key));
}
}
}
Output
Khi bạn chạy mã này, bạn sẽ thấy đầu ra tương tự như này:
Bản đồ ban đầu: {5=25, 4=16, 3=9, 2=4, 1=1}
Bình phương của 3: 9
Bản đồ sau khi loại bỏ 2: {5=25, 4=16, 3=9, 1=1}
Bản đồ có chứa 4 không? true
Bản đồ có chứa giá trị 16 không? true
Duyệt qua bản đồ:
Khóa: 5, Giá trị: 25
Khóa: 4, Giá trị: 16
Khóa: 3, Giá trị: 9
Khóa: 1, Giá trị: 1
Và thế là! Bạn đã bước đầu tiên vào thế giới của WeakHashMap trong Java. Nhớ rằng, sức mạnh thực sự của WeakHashMap đến từ khả năng cho phép các khóa được thu hồi rác khi họ không còn được tham chiếu nào nữa trong chương trình của bạn. Điều này có thể rất hữu ích trong một số tình huống cụ thể, như việc triển khai các bộ nhớ tạm thời hoặc quản lý dữ liệu tạm thời.
Khi bạn tiếp tục hành trình của mình với Java, bạn sẽ khám phá nhiều tình huống hơn nữa trong đó WeakHashMap có thể là một công cụ quý giá trong hộp công cụ lập trình của bạn. Hãy tiếp tục tập luyện, khám phá và quan trọng nhất, hãy có niềm vui khi lập trình!
Credits: Image by storyset