Java中的LinkedHashMap是什么?
Collections框架的LinkedHashMap类是Map接口的Hashtable和LinkedList实现。它将其条目存储在哈希表中,并在内部使用双向链表来维护插入顺序。此 LinkedList 定义插入顺序,即键插入到Map中的顺序。HashMap提供了快速插入、搜索和删除的优点,但在LinkedHashMap中,LinkedList的实现也维护了插入顺序。
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慢。
GO TO FULL VERSION