Java中的LinkedHashMap是什麼?
Collections框架的LinkedHashMap類別是Map介面的Hashtable和LinkedList實作。它將其條目儲存在雜湊表中,並在內部使用雙向鍊錶來維護插入順序。此 LinkedList 定義插入順序,即鍵插入到Map中的順序。HashMap提供了快速插入、搜尋和刪除的優點,但在LinkedHashMap中,LinkedList的實作也維護了插入順序。![Java 中的 LinkedHashMap - 1](https://cdn.codegym.cc/images/article/32fce3d5-f8bb-4b1a-86e6-6e596f8706e3/256.jpeg)
LinkedHashMap的特點
- 它包含基於鍵的值。
- 它包含獨特的元素。
- 它可能有一個空鍵和多個空值。
- 它是非同步的。
- 它維護插入順序,這導致迭代成本更高。
性能因素
LinkedHashMap的效能主要取決於下面描述的兩個因素。容量
容量是指它可以儲存的條目數。若不指定參數,預設容量為16 。負載因子 負載因子意味著每當HashMap填入作為參數提供的特定百分比時,就會建立一個大小加倍的新 HashMap,所有條目都會移動到這個新 HashMap。HashMap 的預設負載因子是0.75。它也稱為填充率。LinkedHashMap的聲明
要建立LinkedHashMap,首先我們需要導入包,也就是java.util.LinkedHashMap。LinkedHashMap<Key, Value> lhm = new LinkedHashMap<>(12, 0.5f);
這裡, Key是映射中鍵的型別。 Value是映射中映射值的型別。 12是容量,這意味著它將在地圖中儲存12個條目。 0.5f是負載因子,這表示當填滿 50% 時,它將建立一個新的Map並將所有值移至這個新的 Map 中。
LinkedHashMap常用方法
這裡列出了LinkedHashMap的一些常用方法。方法 | 描述 |
---|---|
清除() | 刪除地圖中的所有映射。 |
containsValue(物件值) | 如果對應將鍵對應到指定值,則傳回 true。 |
條目集() | 傳回地圖中已對應的設定視圖。 |
取得(對象鍵) | 傳回指定鍵的值,如果未指定鍵,則傳回 null。 |
鍵集() | 返回地圖中鍵的設定視圖。 |
值() | 傳回地圖中值的集合視圖。 |
getOrDefault(物件鍵, V defaultValue) | 傳回與指定鍵關聯的值;如果沒有關聯鍵,則傳回 defaultValue。 |
LinkedHasMap 範例
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
// Creating a LinkedHashMap of odd numbers
LinkedHashMap<String, Integer> oddNumbers = new LinkedHashMap<>();
// Using the put() method
oddNumbers.put("One", 1);
oddNumbers.put("Three", 3);
System.out.println("LinkedHashMap1: " + oddNumbers);
// Creating another LinkedHashMap
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
numbers.put("Two", 2);
// Using putAll() method
numbers.putAll(oddNumbers);
System.out.println("LinkedHashMap2: " + numbers);
// Using entrySet() method
System.out.println("Key/Value mappings: " + numbers.entrySet());
// Using keySet() method
System.out.println("Keys: " + numbers.keySet());
// Using values() method
System.out.println("Values: " + numbers.values());
// Using get() method
int value1 = numbers.get("Three");
System.out.println("Returned Number: " + value1);
// Using getOrDefault() method
int value2 = numbers.getOrDefault("Five", 5);
System.out.println("Returned Number: " + value2);
// Using remove() method
int value = numbers.remove("Two");
System.out.println("Removed value: " + value);
// Using entrySet() method
System.out.println("Key/Value mappings: " + numbers.entrySet());
}
}
輸出
LinkedHashMap1: {One=1, Three=3} LinkedHashMap2: {Two=2, One=1, Three=3} 鍵/值映射:[Two=2, One=1, Three=3] 鍵:[Two, One ,三] 值:[2, 1, 3] 傳回的數量:3 傳回的數量:5 刪除的值:2 鍵/值映射:[一=1,三=3]
LinkedHashMap 與 HashMap
讓我們看看它們之間的一些區別,儘管它們都實作了Map介面。- LinkedHashMap在內部實作雙向鍊錶時維護插入順序。
- LinkedHashMap需要更多的儲存空間,因為它實作了LinkedList。
- 在效能方面,LinkedHashMap比HashMap慢。