LinkedHashMap trong Java là gì?
Giống như HashMap, LinkedHashMap trong Java là một lớp triển khai interface (giao diện) Map trong Java, LinkedHashMap cho phép chúng ta gán value (giá trị) cho một key (khóa).

Những điểm quan trọng về lớp LinkedHashMap trong java cần nhớ là:
LinkedHashMaplưu trữ dữ liệu dưới dạng cặpkeyvàvalue.LinkedHashMapchỉ chứa cáckeyduy nhất.LinkedHashMapcó thể có 1keylànullvà nhiều giá trịnull.LinkedHashMapduy trì các phần tử theo thứ tự chèn.
Tạo một LinkedHashMap trong Java
Để tạo một LinkedHashMap, trước hết ta cần import gói java.util.LinkedHashMap. Khi import xong, chúng ta có thể tạo các LinkedHashMap trong Java theo cách sau:
java
// LinkedHashMap with initial capacity 8 and load factor 0.6
LinkedHashMap<Key, Value> numbers = new LinkedHashMap<>(8, 0.6f);
Trong đoạn code trên, chúng ta đã tạo ra một LinkedHashMap có tên là numbers.
Key- một mã định danh duy nhất được sử dụng để liên kết từng phần tử(giá trị) trong mapValue- các phần tử được liên kết bởi các key trong map
Chú ý phần new LinkedHashMap<>(8, 0.6), tham số đầu tiên là capacity và tham số thứ hai là loadFactor.
capacitylà dung lượng của linked hashmap này là8. Ý nghĩa nó có thể lưu trữ 8 mục.loadFactorlà hệ số tải củaLinkedHashMapnày là0,6. Điều này có nghĩa là, bất cứ khi nàoHashMapcủa chúng ta được lấp đầy60%, các mục nhập vào sau đó sẽ được chuyển sang hash table mới có kích thước gấp đôihash tableban đầu.
Tạo LinkedHashMap từ các Map khác
Sau đây là cách chúng ta có thể tạo một LinkedHashMap có chứa tất cả các phần tử của các map khác.
java
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
// Creating a LinkedHashMap of even numbers
LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>();
evenNumbers.put("Two", 2);
evenNumbers.put("Four", 4);
System.out.println("LinkedHashMap1: " + evenNumbers);
// Creating a LinkedHashMap from other LinkedHashMap
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(evenNumbers);
numbers.put("Three", 3);
System.out.println("LinkedHashMap2: " + numbers);
}
}
Kết quả
LinkedHashMap1: {Two=2, Four=4}
LinkedHashMap2: {Two=2, Four=4, Three=3}
Chèn các phần tử vào LinkedHashMap
put()– chèn key/ value được chỉ định vào mapputAll()– chèn tất cả các mục từ map được chỉ định vào map nàyputIfAbsent()– chènkey/valueđược chỉ định vào map nếu key được chỉ định không có trong map
java
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
// Creating LinkedHashMap of even numbers
LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>();
// Using put()
evenNumbers.put("Two", 2);
evenNumbers.put("Four", 4);
System.out.println("Original LinkedHashMap: " + evenNumbers);
// Using putIfAbsent()
evenNumbers.putIfAbsent("Six", 6);
System.out.println("Updated LinkedHashMap(): " + evenNumbers);
//Creating LinkedHashMap of numbers
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
numbers.put("One", 1);
// Using putAll()
numbers.putAll(evenNumbers);
System.out.println("New LinkedHashMap: " + numbers);
}
}
Kết quả
Original LinkedHashMap: {Two=2, Four=4}
Updated LinkedHashMap: {Two=2, Four=4, Six=6}
New LinkedHashMap: {One=1, Two=2, Four=4, Six=6}
Truy cập các phần tử LinkedHashMap
entrySet()– trả về một tập hợp tất cả key/ value của mapkeySet()– trả về một tập hợp tất cả các key của mapvalues()– trả về một tập hợp tất cả các value của map
java
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("LinkedHashMap: " + numbers);
// Using entrySet()
System.out.println("Key/Value mappings: " + numbers.entrySet());
// Using keySet()
System.out.println("Keys: " + numbers.keySet());
// Using values()
System.out.println("Values: " + numbers.values());
}
}
Kết quả
LinkedHashMap: {One=1, Two=2, Three=3}
Key/Value mappings: [One=1, Two=2, Three=3]
Keys: [One, Two, Three]
Values: [1, 2, 3]
get()- Trả về value liên kết với key được chỉ định. Nếu không tìm thấy key, nó sẽ trả về null.getOrDefault()- Trả về value liên quan đến key được chỉ định. Nếu không tìm thấy key, nó sẽ trả về value mặc định đã chỉ định.
java
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("LinkedHashMap: " + numbers);
// Using get()
int value1 = numbers.get("Three");
System.out.println("Returned Number: " + value1);
// Using getOrDefault()
int value2 = numbers.getOrDefault("Five", 5);
System.out.println("Returned Number: " + value2);
}
}
Kết quả
LinkedHashMap: {One=1, Two=2, Three=3}
Returned Number: 3
Returned Number: 5
Xóa các phần tử khỏi LinkedHashMap
remove(key)– trả về và xóa mục liên quan đến key chỉ định từ mapremove(key, value)– chỉ xóa mục khỏi map nếu key được chỉ định liên kết vớivalueđược chỉ định và trả về giá trịboolean
java
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("LinkedHashMap: " + numbers);
// remove method with single parameter
int value = numbers.remove("Two");
System.out.println("Removed value: " + value);
// remove method with two parameters
boolean result = numbers.remove("Three", 3);
System.out.println("Is the entry Three removed? " + result);
System.out.println("Updated LinkedHashMap: " + numbers);
}
}
Kết quả
LinkedHashMap: {One=1, Two=2, Three=3}
Removed value: 2
Is the entry {Three=3} removed? True
Updated LinkedHashMap: {One=1}
Các hàm khác của LinkedHashMap
| Hàm | Sự miêu tả |
|---|---|
clear() |
xóa tất cả các mục khỏi map |
containsKey() |
kiểm tra xem map có chứa key được chỉ định hay không và trả về giá trị boolean |
containsValue() |
kiểm tra xem map có chứa value được chỉ định hay không và trả về giá trị boolean |
size() |
trả về kích thước của map |
isEmpty() |
kiểm tra xem map có trống không và trả về giá trị boolean |
So sánh LinkedHashMap với HashMap
Cả LinkedHashMap và HashMap đều triển khai giao diện Map. Tuy nhiên, có một số khác biệt giữa chúng.
LinkedHashMapduy trì một danh sách liên kết đôi trong nội bộ. Do đó, nó bảo toàn thứ tự được chèn vào của các phần tử của nó.Class LinkedHashMaptốn nhiều vùng lưu trữ hơnHashMap. Đó là doLinkedHashMapduy trìLinkedListtrong nội bộ.- Hiệu suất của
LinkedHashMapchậm hơnHashMap.