Map接口是Java中用于存储键值对的核心抽象,建立“通过键快速定位值”的映射关系;它是双列集合,不继承Collection接口,键唯一、值可重复,常见实现类包括HashMap、TreeMap、LinkedHashMap和ConcurrentHashMap。

Map接口在Java中是用来存储和操作键值对(Key-Value)数据的核心抽象,它的本质作用是建立“通过键快速定位值”的映射关系。
Map是双列集合,不是Collection的子类
它和List、Set并列,同属Java集合框架的顶层接口之一,不继承Collection接口。这意味着Map不支持按索引访问,也没有add()这样的单元素添加方法——每次操作都必须同时处理一个键和一个值。
常见使用场景包括:用户ID对应用户对象、配置项名称对应配置值、HTTP请求头名对应头值等。
键唯一、值可重复,支持null但有约束
同一个Map中,Key必须唯一;重复put相同Key会覆盖旧值,并返回被替换的旧Value。Value则没有唯一性要求,可以多个Key对应相同的Value,也可以多个Value为null。
立即学习“Java免费学习笔记(深入)”;
不同实现类对null的支持略有差异:
- HashMap:允许一个null键、多个null值
- TreeMap:不允许null键(会抛NullPointerException),但允许null值
- Hashtable:键和值都不允许为null
核心操作围绕“键”展开
Map的所有基本行为都以Key为中心:
- put(K,V):插入或更新键值对
- get(Object key):根据Key取Value,Key不存在时返回null
- containsKey(Object key):判断某Key是否存在
- remove(Object key):删除指定Key对应的整个映射
- keySet():获取所有Key组成的Set,适合遍历Key
- values():获取所有Value组成的Collection,注意不是Set(可能含重复)
- entrySet():获取所有键值对(Map.Entry)组成的Set,是最高效、最常用的遍历方式
不同实现类解决不同实际问题
Map是接口,真正干活的是它的实现类:
- HashMap:默认选择,底层哈希表,平均O(1)查/改/删,无序,非线程安全
- LinkedHashMap:在HashMap基础上加双向链表,可按插入顺序或访问顺序迭代
- TreeMap:基于红黑树,Key自动排序(需实现Comparable或传Comparator),支持范围查询
- ConcurrentHashMap:高并发场景下的线程安全替代方案,比Hashtable性能更好
选哪个,取决于你是否需要排序、是否多线程、是否关注遍历顺序等具体需求。










