Java LinkedHashMap
Java LinkedHashMap
在本教程中,我们将通过示例了解 Java LinkedHashMap 类及其操作。
LinkedHashMap
Java集合框架类提供了Map接口的哈希表和链表实现。
LinkedHashMap
接口扩展了 HashMap 类以将其条目存储在哈希表中。它在内部维护所有条目之间的双向链表以对其条目进行排序。
创建 LinkedHashMap
为了创建链接的哈希图,我们必须导入 java.util.LinkedHashMap
先打包。导入包后,我们可以通过以下方式在 Java 中创建链接的哈希图。
// LinkedHashMap with initial capacity 8 and load factor 0.6
LinkedHashMap<Key, Value> numbers = new LinkedHashMap<>(8, 0.6f);
在上面的代码中,我们创建了一个名为 numbers 的链接 hashmap .
在这里,
- 键 - 用于关联地图中每个元素(值)的唯一标识符
- 值 - 由地图中的键关联的元素
注意部分 new LinkedHashMap<>(8, 0.6)
.这里,第一个参数是容量 第二个参数是 loadFactor .
- 容量 - 这个链接hashmap的容量是8。意思是,它可以存储8个条目。
- 负载系数 - 此链接哈希图的负载因子为 0.6。这意味着,每当我们的哈希映射填充 60% 时,条目就会移动到一个新哈希表,其大小是原始哈希表的两倍。
默认容量和负载率
可以在不定义其容量和负载因子的情况下创建链接的哈希图。例如,
//LinkedHashMap with default capacity and load factor
LinkedHashMap<Key, Value> numbers1 = new LinkedHashMap<>();
默认情况下,
- 链接的 hashmap 的容量为 16
- 负载系数为 0.75
注意 :LinkedHashMap
类还允许我们定义其条目的顺序。比如
// LinkedHashMap with specified order
LinkedHashMap<Key, Value> numbers2 = new LinkedHashMap<>(capacity, loadFactor, accessOrder);
这里,accessOrder 是一个布尔值。它的默认值为 false
.在这种情况下,链接的 hashmap 中的条目根据它们的插入顺序进行排序。
但是,如果 true
作为 accessOrder 传递 , 链接的 hashmap 中的条目将按照从最近最少访问到最近访问的顺序排列。
从其他地图创建 LinkedHashMap
以下是我们如何创建包含其他地图的所有元素的链接哈希图。
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);
}
}
输出
LinkedHashMap1: {Two=2, Four=4} LinkedHashMap2: {Two=2, Four=4, Three=3}
LinkedHashMap的方法
LinkedHashMap
类提供了允许我们在地图上执行各种操作的方法。
向 LinkedHashMap 插入元素
put()
- 将指定的键/值映射插入到映射中putAll()
- 将指定地图中的所有条目插入到此地图中putIfAbsent()
- 如果指定的键不存在于映射中,则将指定的键/值映射插入到映射中
例如,
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);
}
}
输出
Original LinkedHashMap: {Two=2, Four=4} Updated LinkedHashMap: {Two=2, Four=4, Six=6} New LinkedHashMap: {One=1, Two=2, Four=4, Six=6}
访问 LinkedHashMap 元素
1。使用 entrySet()、keySet() 和 values()
entrySet()
- 返回一组映射的所有键/值映射keySet()
- 返回一组地图的所有键values()
- 返回一组地图的所有值
例如,
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());
}
}
输出
LinkedHashMap: {One=1, Two=2, Three=3} Key/Value mappings: [One=1, Two=2, Three=3] Keys: [One, Two, Three] Values: [1, 2, 3]
2。使用 get() 和 getOrDefault()
get()
- 返回与指定键关联的值。如果未找到密钥,则返回null
.getOrDefault()
- 返回与指定键关联的值。如果未找到该键,则返回指定的默认值。
例如,
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);
}
}
输出
LinkedHashMap: {One=1, Two=2, Three=3} Returned Number: 3 Returned Number: 5
已移除 LinkedHashMap 元素
remove(key)
- 返回并删除与指定 key 关联的条目 从地图上remove(key, value)
- 仅当指定 key 时才从地图中删除条目 映射为指定的 值 并返回一个布尔值
例如,
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);
}
}
输出
LinkedHashMap: {One=1, Two=2, Three=3} Removed value: 2 Is the entry {Three=3} removed? True Updated LinkedHashMap: {One=1}
LinkedHashMap的其他方法
方法 | 说明 |
---|---|
clear() | 从地图中删除所有条目 |
containsKey() | 检查映射是否包含指定的键并返回一个布尔值 |
containsValue() | 检查地图是否包含指定的值并返回一个布尔值 |
size() | 返回地图的大小 |
isEmpty() | 检查地图是否为空并返回一个布尔值 |
LinkedHashMap 对比。哈希映射
LinkedHashMap
和 HashMap
实现 Map
界面。但是,它们之间存在一些差异。
LinkedHashMap
在内部维护一个双向链表。因此,它保持其元素的插入顺序。LinkedHashMap
类需要比HashMap
更多的存储空间 .这是因为LinkedHashMap
在内部维护链表。LinkedHashMap
的表现 比HashMap
慢 .
java