Map如何使用?HashMap是有序的吗?有序Map是哪个?
1 个回答
遇见错的人会消耗你,遇见对的人会治愈你。水月大师## 作用 - `Map` 用于存储“键(Key)—值(Value)”映射关系。 - 每个键唯一对应一个值,键不能重复,值可以重复。 - 常用方法包括: - `put(key, value)`:添加或修改键值对 - `get(key)`:根据键获取值 - `remove(key)`:根据键删除元素 - `putIfAbsent(key, value)`:键不存在时才插入 - `putAll(map)`:合并另一个 Map - `entrySet()`:遍历键值对 - `keySet()`:获取所有键 - `values()`:获取所有值 示例: ```java Map<String, Integer> scores = new HashMap<>(); scores.put("Alice", 90); scores.put("Bob", 85); int score = scores.get("Alice"); for (Map.Entry<String, Integer> entry : scores.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } ``` ## 原理与顺序说明 ### HashMap - `HashMap` 是**无序的**,不保证插入顺序,也不保证遍历顺序长期不变。 - 它基于哈希表实现,JDK 1.8 后底层结构为“数组 + 链表 + 红黑树”。 - 通过键的 `hashCode()` 定位数组位置;发生哈希冲突时使用链表处理,链表过长且数组容量达到条件时会转换为红黑树。 - 允许一个 `null` 键和多个 `null` 值,线程不安全,平均查询复杂度为 `O(1)`。 - 自定义对象作为键时,通常需要同时重写 `hashCode()` 和 `equals()`。 ### 有序 Map 常见的有序 Map 有: - `LinkedHashMap` - 继承自 `HashMap`。 - 使用双向链表维护顺序。 - 默认按**插入顺序**遍历,也可以配置为按**访问顺序**遍历。 - 适合需要保留插入顺序或实现 LRU 缓存的场景。 - `TreeMap` - 基于红黑树实现。 - 按键的**自然顺序**排序,或通过自定义 `Comparator` 指定排序规则。 - 适合需要按照键排序的场景。 - 插入、删除、查找复杂度通常为 `O(log n)`。 因此,如果题目问“HashMap 是否有序”,答案是:**HashMap 无序**;如果要保留插入顺序,使用 `LinkedHashMap`;如果要按键排序,使用 `TreeMap`。发布于 2026-10-25 03:02 •IP属地 山西举报评论收藏
公众号进入网站体验更佳

