linkhashmap底层实现原理
时间: 2023-08-29 07:14:21 浏览: 108
LinkedHashMap 是 HashMap 的子类,它在 HashMap 的基础上增加了一个双向链表来维护元素的插入顺序或者访问顺序。
LinkedHashMap 的底层实现原理如下:
1. LinkedHashMap 继承自 HashMap,它内部维护了一个 Entry 数组 table,与 HashMap 一样,用于存储键值对。
2. LinkedHashMap 还维护了一个双向链表,用于维护元素的插入顺序或者访问顺序。链表的节点是 Entry 类型,它继承自 HashMap.Entry,除了 key、value、next 属性外,还有两个指向前后节点的指针 before 和 after。
3. 当新元素插入 LinkedHashMap 中时,除了在 table 数组中存储,还会在链表的末尾插入一个新节点,并将该节点的 before 指针指向链表的尾节点,after 指针指向 null。
4. 当访问 LinkedHashMap 中的元素时,如果是按照访问顺序迭代元素,则会将该元素对应的节点从链表中删除,并将其重新插入到链表的末尾。
5. 当元素数量达到阈值时,LinkedHashMap 会执行扩容操作,与 HashMap 一样,将 table 数组大小扩大一倍。
总之,LinkedHashMap 在 HashMap 的基础上增加了一个链表来维护元素顺序,这使得它可以按照插入顺序或者访问顺序迭代元素。
相关问题
linkhashmap逆序输出
要逆序输出一个 `LinkedHashMap` 的键值对,你可以使用 `LinkedHashMap` 的 `entrySet()` 方法获取所有的键值对,并将其转换为一个 `List`。然后,使用 `Collections` 类的 `reverse()` 方法将该列表反转。最后,遍历反转后的列表并输出每个键值对。
以下是一个示例代码:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.reverse(list);
for (Map.Entry<String, Integer> entry : list) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
```
运行以上代码,输出结果将是:
```
C : 3
B : 2
A : 1
```
希望能帮到你!如果有任何问题,请随时问我。
linkhashmap转换成map
可以通过遍历 LinkHashMap 的方式将其转换为 Map。以下是示例代码:
```java
LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("A", 1);
linkedHashMap.put("B", 2);
linkedHashMap.put("C", 3);
Map<String, Integer> map = new HashMap<>();
for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {
map.put(entry.getKey(), entry.getValue());
}
```
在这个示例中,我们首先创建了一个 `LinkedHashMap`,然后将其填充了一些值。然后,我们创建了一个新的 `HashMap`,并使用 `for` 循环遍历 `LinkedHashMap` 中的每一个条目,并将它们添加到新的 `HashMap` 中。最终,我们得到了一个普通的 `HashMap`,其中包含与原始 `LinkedHashMap` 相同的键值对。