HashMap 是一种高效的数据结构,用于存储键值对(Key-Value),基于哈希表(Hash Table)实现。它通过哈希函数将键(Key)映射到存储位置,从而实现快速的数据插入、删除和查询操作。
核心特性
1. 键值对存储
每个元素由唯一的键(Key)和对应的值(Value)组成,例如:`”name”: “Alice”, “age”: 25}`。
2. 快速访问
平均时刻复杂度为 O(1)(通常来说),直接通过键计算哈希值定位数据位置,无需遍历。
3. 哈希冲突处理
4. 动态扩容
当元素数量超过阈值(如容量×负载因子),自动扩容(通常翻倍)以减少冲突。
5. 允许Null键/值
例如Java的HashMap允许一个`null`键和多个`null`值,而`Hashtable`不允许。
内部结构(以Java为例)
![HashMap结构示意图]
常见操作
使用场景
1. 缓存体系:快速通过键查询值(如用户ID→用户信息)。
2. 数据去重:利用键的唯一性过滤重复元素。
3. 统计频率:记录单词出现的次数(Key为单词,Value为计数)。
4. 数据库索引:模拟索引加速查询。
注意事项
代码示例(Java)
java
HashMap scores = new HashMap;
scores.put(“Alice”, 90);
scores.put(“Bob”, 85);
System.out.println(scores.get(“Alice”)); // 输出:90
对比其他结构
| 结构 | 特点 |
| Hashtable | 线程安全但性能低,不允许Null |
| TreeMap | 按键排序,操作复杂度O(log n) |
| LinkedHashMap| 保留插入/访问顺序,适合LRU缓存 |
掌握HashMap的原理和使用场景,能在多数场景下高效管理键值数据!
