Table of Contents
Giới thiệu
HashMap là lớp sử dụng một bảng băm để cài đặt một kiểu dữ liệu từ giao diện Map (Map interface). Nó giảm thời gian thực hiện các phép toán cơ bản, như get() và put(), xuống còn hằng số thậm chí khi làm việc những tập dữ liệu lớn.

Cách HaspMap hoạt động
HashMap hoạt động dựa trên nguyên lí của thuật toán băm (hashing). Để hiểu cách thức băm, chúng ta nên hiểu ba thuật ngữ đầu tiên, đó là Hàm băm (Hash Function), Giá trị băm (Hash Value), và Thùng/Rổ chứa các giá trị băm (Bucket).
Hàm băm, giá trị băm và thùng chứa là gì?
Hàm hashCode() trả về một giá trị nguyên làm vai trò của một hàm băm. Quan trọng, cần lưu ý rằng phương thức này xuất hiện trong lớp Object (là lớp cha/mẹ của mọi lớp khác trong Java).
Đây là mô tả hàm băm (hash function) (được biết như là phương thức hashCode) trong lớp Object:
public native int hashCode()
Điểm quan trọng cần lưu ý ở đây là phương thức hashCode ở trên trả về một giá trị kiểu số nguyên. Vì vậy giá trị băm (hash value) là giá trị nguyên được hàm băm ở trên trả về.

Lớp HashMap hỗ trợ 4 phương thức tạo/khởi tạo đối tượng. Phương thức đầu tiên để tạo/khởi tạo một đối tượng HashMap là xây dựng một bảng băm ngầm định:
HashMap()
Phương thức thứ hai khởi tạo một đối tượng HashMap bằng việc sử dụng một đối tượng HashMap khác, còn được gọi là hàm tạo sao chép.
HashMap(Map m)
Phương thức thứ ba khởi tạo một đối tượng bảng băm với sức chứa (capacity) cụ thể.
HashMap(int capacity)
Phương thức thứ tư khởi tạo một đối tượng bảng băm với hai tham số sức chứa (capacity) và tỉ lệ làm đầy bảng băm (fillRatio).
HashMap(int capacity, float fillRatio)
Một số phương thức được định nghĩa thêm trong lớp HashMap
Ngoài những phương thức kế thừa từ các lớp cha, lớp HashMap định nghĩa thêm những phương thức sau:
VD: Ví dụ sau đây minh họa một vài phương thức mà lớp này hỗ trợ.
import java.util.*;
public class HashMapDemo {
public static void main(String args[]) {
// Create a hash map
HashMap hm = new HashMap();
// Put elements to the map
hm.put("Zara", new Double(3434.34));
hm.put("Mahnaz", new Double(123.22));
hm.put("Ayan", new Double(1378.00));
hm.put("Daisy", new Double(99.22));
hm.put("Qadir", new Double(-19.08));
// Get a set of the entries
Set set = hm.entrySet();
// Get an iterator
Iterator i = set.iterator();
// Display elements
while(i.hasNext()) {
Map.Entry me = (Map.Entry)i.next();
System.out.print(me.getKey() + ": ");
System.out.println(me.getValue());
}
System.out.println();
// Deposit 1000 into Zara's account
double balance = ((Double)hm.get("Zara")).doubleValue();
hm.put("Zara", new Double(balance + 1000));
System.out.println("Zara's new balance: " +
hm.get("Zara"));
}
}
Chương trình này sẽ sinh ra kết quả như sau:
Zara: 3434.34 Mahnaz: 123.22 Daisy: 99.22 Ayan: 1378.0 Qadir: -19.08 Zara's new balance: 4434.34
Tham khảo thêm:
https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
http://examples.javacodegeeks.com/core-java/util/hashmap/hashmap-changes-in-java-8/
http://javahungry.blogspot.com/2013/08/hashing-how-hash-map-works-in-java-or.html
http://sinhvienit.net/forum/hashmap-trong-java.353561.html
http://www.tutorialspoint.com/java/java_hashmap_class.htm
