1. Map接口:键值对的基石
第一次接触Java的Map接口时,我把它想象成一个智能字典。就像查字典时通过拼音找汉字一样,Map通过唯一的key快速定位对应的value。这种数据结构在日常开发中无处不在,从用户会话管理到系统配置存储,Map都是幕后功臣。
Map的核心方法其实就三类:存、取、查。put(key, value)是存数据的老伙计,每次调用都像往保险箱里放物品;get(key)则是取数据的万能钥匙;而containsKey()就像保险箱的检查员,告诉你某个物品是否存在。不过最容易让人困惑的是遍历方式,这里分享两个实用技巧:
java复制// 方法1:先拿所有钥匙再开锁
Map<String, Integer> scoreMap = new HashMap<>();
scoreMap.put("Alice", 90);
scoreMap.put("Bob", 85);
for (String name : scoreMap.keySet()) {
System.out.println(name + "的成绩是:" + scoreMap.get(name));
}
// 方法2:直接获取保险箱里的物品清单
for (Map.Entry<String, Integer> entry : scoreMap.entrySet()) {
System.out.println(entry.getKey() + "的成绩是:" + entry.getValue());
}
实际项目中,第二种方式性能更好。记得有次处理10万条数据时,方法2比方法1快了近30%,因为避免了重复查询。Map.Entry这个静态内部类就像个快递盒,把key和value打包在一起,拆箱时效率自然更高。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. HashMap:速度与激情的代价
HashMap就像个急性子,追求极致的存取速度,但需要开发者精心调教。它的底层是数组加链表(JDK8后还有红黑树),这种混合结构让它在大多数场景下都能O(1)时间复杂度完成操作。不过去年我踩过一个坑:自定义对象作为key时忘记重写hashCode,导致性能暴跌。
哈希冲突是HashMap的阿克琉斯之踵。试想有个长度为16的数组,如果所有元素都挤在同一个位置,那就退化成了链表。我曾见过有人这
