Trong Java, HashMap
, LinkedHashMap
, và TreeMap
là ba lớp quan trọng thuộc gói java.util
và được sử dụng để lưu trữ và quản lý các cặp khóa-giá trị. Mỗi lớp có các đặc điểm riêng, mang lại những lợi ích và hạn chế khác nhau, phù hợp với các nhu cầu cụ thể trong lập trình. Bài viết này sẽ phân tích chi tiết về ba loại bản đồ này, so sánh các đặc điểm và cung cấp hướng dẫn sử dụng.
HashMap
sử dụng bảng băm (hash table) để lưu trữ các cặp khóa-giá trị.null
(một khóa null
và nhiều giá trị null
).HashMap
không đồng bộ. Nếu nhiều luồng cùng truy cập và thay đổi bản đồ, có thể xảy ra vấn đề đồng bộ.import java.util.HashMap; public class HashMapExample { public static void main(String[] args) { HashMap<String, Integer> hashMap = new HashMap<>(); hashMap.put("Apple", 1); hashMap.put("Banana", 2); hashMap.put("Orange", 3); System.out.println("HashMap: " + hashMap); } }
LinkedHashMap
kết hợp giữa HashMap
và danh sách liên kết. Nó lưu trữ các cặp khóa-giá trị như HashMap
nhưng cũng duy trì thứ tự thêm của các phần tử.null
như HashMap
.HashMap
, LinkedHashMap
cũng không đồng bộ.import java.util.LinkedHashMap; public class LinkedHashMapExample { public static void main(String[] args) { LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>(); linkedHashMap.put("Apple", 1); linkedHashMap.put("Banana", 2); linkedHashMap.put("Orange", 3); System.out.println("LinkedHashMap: " + linkedHashMap); } }
TreeMap
sử dụng cây nhị phân tự cân bằng (cụ thể là cây đỏ-đen) để lưu trữ các cặp khóa-giá trị.TreeMap
.null
(tuy nhiên, giá trị null
được cho phép).HashMap
và LinkedHashMap
, TreeMap
cũng không đồng bộ.import java.util.TreeMap; public class TreeMapExample { public static void main(String[] args) { TreeMap<String, Integer> treeMap = new TreeMap<>(); treeMap.put("Apple", 1); treeMap.put("Banana", 2); treeMap.put("Orange", 3); System.out.println("TreeMap: " + treeMap); } }
null
null
.null
.null
.HashMap
, LinkedHashMap
, và TreeMap
đều là các cấu trúc dữ liệu mạnh mẽ để quản lý các cặp khóa-giá trị trong Java, nhưng chúng phục vụ cho các mục đích khác nhau. Nếu bạn cần tốc độ và không cần thứ tự, hãy chọn HashMap
. Nếu bạn cần duy trì thứ tự thêm, LinkedHashMap
là lựa chọn tốt. Cuối cùng, nếu bạn cần sắp xếp các khóa, hãy sử dụng TreeMap
. Việc hiểu rõ sự khác biệt giữa chúng sẽ giúp bạn lựa chọn cấu trúc dữ liệu phù hợp nhất cho ứng dụng của mình.