Java HashMap: Chìa Khóa Của Bạn Để Lưu Trữ và Truy Xuất Dữ Liệu Hiệu Quả
Giới Thiệu
Xin chào các bạn nhà lập trình Java mới! Hôm nay, chúng ta sẽ bắt đầu hành trình thú vị vào thế giới Java HashMap. Đừng để tên quá tò mò này làm bạn sợ. Hãy tưởng tượng HashMap như là một柜 hồ sơ siêu thông minh cho dữ liệu của bạn. Nó như có một trợ lý cá nhân có thể ngay lập tức tìm thấy bất kỳ piece of information nào bạn cần!
Khi tôi đầu tiên học về HashMap, tôi tưởng tượng chúng như là một thư viện ma thuật nơi sách (dữ liệu của chúng ta) có thể bay từ giá và vào tay chúng ta ngay khi chúng ta yêu cầu. Đó chính là điều mà HashMap làm, nhưng với dữ liệu máy tính thay vì sách. Cool, phải không?
Hãy bước vào và mở khóa bí mật của lớp Java mạnh mẽ này!
Khai Báo Lớp
Trong Java, lớp HashMap được khai báo như sau:
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
Ồ! Đó là một đoạn mã dài, phải không? Đừng lo lắng nếu nó trông như một chảo súp chữ cái ngay bây giờ. Hãy phân tích nó:
-
public class HashMap<K,V>
: Điều này cho chúng ta biết HashMap là một lớp public (bất kỳ ai cũng có thể sử dụng) và nó sử dụng hai tham số kiểu,K
cho kiểu khóa vàV
cho kiểu giá trị. -
extends AbstractMap<K,V>
: HashMap đang xây dựng trên một lớp khác có tên là AbstractMap. -
implements Map<K,V>, Cloneable, Serializable
: Những giao diện này mà HashMap thực hiện, mang lại cho nó nhiều quyền năng hơn!
Tham Số
Nhớ rồi phân tử thư viện ma thuật của chúng ta? Giờ, trong thư viện này, mỗi cuốn sách (giá trị) có một số gọi duy nhất (khóa). Trong các thuật ngữ HashMap:
-
K
: Kiểu của các khóa được duy trì bởi bản đồ này -
V
: Kiểu của các giá trị được ánh xạ
Ví dụ, nếu bạn muốn lưu trữ tuổi của mọi người, bạn có thể sử dụng String
cho các tên (khóa) và Integer
cho các tuổi (giá trị).
Các Hàm Khởi Tạo Lớp
HashMap có bốn hàm khởi tạo khác nhau. Hãy tưởng tượng chúng là những cách khác nhau để xây dựng thư viện ma thuật của chúng ta:
-
HashMap()
: Tạo một HashMap trống với khả năng và hệ số tải mặc định. -
HashMap(int initialCapacity)
: Tạo một HashMap trống với khả năng ban đầu được chỉ định và hệ số tải mặc định. -
HashMap(int initialCapacity, float loadFactor)
: Tạo một HashMap trống với khả năng ban đầu và hệ số tải được chỉ định. -
HashMap(Map<? extends K, ? extends V> m)
: Tạo một HashMap mới với các ánh xạ tương tự như Map được chỉ định.
Đừng lo quá nhiều về khả năng và hệ số tải bây giờ. Chỉ cần biết rằng chúng ảnh hưởng đến cách hiệu quả HashMap hoạt động ở phía sau màn hình.
Các Phương Thức Lớp
Bây giờ, hãy xem những điều kỳ diệu mà HashMap của chúng ta có thể làm. Tôi sẽ chỉ cho bạn một số phương thức thường được sử dụng:
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 chỉ định |
remove(Object key) |
Xóa ánh xạ cho khóa được chỉ định |
clear() |
Xóa tất cả các ánh xạ khỏi bản đồ |
size() |
Trả về số lượng các ánh xạ khóa-giá trị trong bản đồ |
isEmpty() |
Trả về true nếu bản đồ không chứa các ánh xạ |
containsKey(Object key) |
Trả về true nếu bản đồ chứa khóa được chỉ định |
containsValue(Object value) |
Trả về true nếu bản đồ chứa giá trị được chỉ định |
Các Phương Thức Kế Thừa
HashMap cũng kế thừa các phương thức từ các lớp và giao diện cha mẹ của nó. Nó như thư viện ma thuật của chúng ta kế thừa một số kỹ năng từ các thư viện cũ hơn và thông thái hơn! Dưới đây là một số ví dụ:
- Từ
java.util.AbstractMap
:equals()
,hashCode()
,toString()
- Từ
java.util.Map
:putAll()
,entrySet()
,keySet()
,values()
Ví Dụ
Hãy đặt kiến thức mới của chúng ta vào thực hành với một ví dụ đơn giản. Chúng ta sẽ tạo một HashMap để lưu trữ tuổi của một số nhà khoa học nổi tiếng:
import java.util.HashMap;
public class ScientistAges {
public static void main(String[] args) {
// Tạo một HashMap mới
HashMap<String, Integer> scientistAges = new HashMap<>();
// Thêm một số cặp khóa-giá trị
scientistAges.put("Albert Einstein", 76);
scientistAges.put("Isaac Newton", 84);
scientistAges.put("Marie Curie", 66);
// Truy xuất và in ra một giá trị
System.out.println("Tuổi của Albert Einstein: " + scientistAges.get("Albert Einstein"));
// Kiểm tra xem khóa có tồn tại hay không
if (scientistAges.containsKey("Stephen Hawking")) {
System.out.println("Chúng ta có tuổi của Stephen Hawking.");
} else {
System.out.println("Chúng ta không có tuổi của Stephen Hawking.");
}
// In ra số lượng của HashMap
System.out.println("Số lượng nhà khoa học: " + scientistAges.size());
// Xóa một cặp khóa-giá trị
scientistAges.remove("Isaac Newton");
// In ra tất cả các cặp khóa-giá trị
for (String name : scientistAges.keySet()) {
System.out.println(name + " sống đến được " + scientistAges.get(name) + " tuổi.");
}
}
}
Đầu Ra
Khi chúng ta chạy mã này, chúng ta sẽ thấy:
Tuổi của Albert Einstein: 76
Chúng ta không có tuổi của Stephen Hawking.
Số lượng nhà khoa học: 3
Albert Einstein sống đến được 76 tuổi.
Marie Curie sống đến được 66 tuổi.
Hãy phân tích lại điều gì đã xảy ra:
- Chúng ta đã tạo một HashMap mới có tên là
scientistAges
. - Chúng ta đã thêm ba cặp khóa-giá trị: tên các nhà khoa học và tuổi của họ.
- Chúng ta đã truy xuất tuổi của Einstein bằng cách sử dụng phương thức
get()
. - Chúng ta đã kiểm tra xem chúng ta có tuổi của Hawking hay không bằng cách sử dụng
containsKey()
. Chúng ta không có, vì vậy nó in ra thông báo "không có". - Chúng ta đã in ra số lượng nhà khoa học trong bản đồ của chúng ta bằng cách sử dụng
size()
. - Chúng ta đã xóa Newton khỏi bản đồ bằng cách sử dụng
remove()
. - Cuối cùng, chúng ta đã sử dụng vòng lặp for-each để duyệt qua tất cả các cặp khóa-giá trị còn lại và in chúng ra.
Và đó là thế! Bạn đã bước ra đầu tiên vào thế giới của Java HashMap. Nhớ rằng, luyện tập là chìa khóa. Hãy thử tạo các HashMap của riêng bạn với các loại dữ liệu khác nhau. Có thể là tạo một bản đồ của các cuốn sách yêu thích của bạn và các tác giả, hoặc các bạn bè và số điện thoại của họ.
HashMap rất hữu ích trong lập trình thực tế. Chúng giống như một chiếcdao kiếm Thụy Sĩ của cấu trúc dữ liệu – linh hoạt, hiệu quả và luôn có sẵn. Tiếp tục khám phá, tiếp tục lập trình, và trước khi bạn biết, bạn sẽ trở thành một chiến binh HashMap!
Credits: Image by storyset