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à:
LinkedHashMap
lưu trữ dữ liệu dưới dạng cặpkey
vàvalue
.LinkedHashMap
chỉ chứa cáckey
duy nhất.LinkedHashMap
có thể có 1key
lànull
và nhiều giá trịnull
.LinkedHashMap
duy 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
.
capacity
là dung lượng của linked hashmap này là8
. Ý nghĩa nó có thể lưu trữ 8 mục.loadFactor
là hệ số tải củaLinkedHashMap
này là0,6
. Điều này có nghĩa là, bất cứ khi nàoHashMap
củ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 table
ban đầ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.
LinkedHashMap
duy 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 LinkedHashMap
tốn nhiều vùng lưu trữ hơnHashMap
. Đó là doLinkedHashMap
duy trìLinkedList
trong nội bộ.- Hiệu suất của
LinkedHashMap
chậm hơnHashMap
.