LinkedHashMap通过双向链表维护插入顺序,插入新元素时添加到链表末尾,遍历时按链表顺序访问,从而保证输出顺序与插入顺序一致。

在Java中,LinkedHashMap 能够保持元素的插入顺序,这是它与 HashMap 的主要区别之一。如果你希望在遍历Map时,元素的顺序和插入顺序一致,使用 LinkedHashMap 是最直接有效的选择。
LinkedHashMap 如何保持插入顺序
LinkedHashMap 内部通过双向链表维护了条目的插入顺序。每当插入一个新的键值对,该条目就会被添加到链表的末尾。遍历时,按照链表的顺序访问元素,因此输出顺序与插入顺序一致。
说明:
- 即使扩容(resize),链表结构依然保持原有顺序。
- 如果插入一个已经存在的键(即更新操作),默认情况下不会改变其在链表中的位置(除非设置了访问顺序模式)。
基本使用示例
下面是一个简单的代码示例,展示 LinkedHashMap 如何保持插入顺序:
立即学习“Java免费学习笔记(深入)”;
import java.util.LinkedHashMap;
import java.util.Map;
public class LinkedHashMapExample {
public static void main(String[] args) {
Map map = new LinkedHashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Orange", 3);
// 遍历时顺序与插入顺序一致
for (Map.Entry entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
输出结果为:
terseBanner是一款简洁优雅的jquery轮播图插件。它删除了很多不实用或很少用的功能,只保留了最常用的,使用方便,功能完善,可以满足绝大多数网站的需求。该轮播图插件支持ie8浏览器,支持触屏事件。 使用方法 在页面中引入jquery和jquery.terseBanner.min.js文件。
Banana: 2
Orange: 3
插入顺序 vs 访问顺序
LinkedHashMap 还支持“访问顺序”模式。可以通过构造函数指定:
new LinkedHashMap<>(initialCapacity, loadFactor, true);
第三个参数为 true 时,启用访问顺序模式:最近访问的元素(包括 get 操作)会被移到链表末尾。这种模式适合实现 LRU 缓存。
但默认情况下(第三个参数为 false 或使用无参构造函数),LinkedHashMap 使用的是插入顺序,这也是大多数场景下的需求。
基本上就这些。只要不设置 accessOrder 为 true,LinkedHashMap 就会自然地按插入顺序保存和遍历元素,使用简单且性能良好。









