Java中Map的多种用法

1. 创建:5 种一行写法

java 复制代码
// ① 传统
Map<String, Integer> map = new HashMap<>();

// ② 不可变(JDK 9+)
Map<String, Integer> map = Map.of("a", 1, "b", 2);

// ③ 函数式(JDK 8+)
Map<String, Integer> map = Stream.of(new Object[][]{{"a", 1}, {"b", 2}})
                                 .collect(Collectors.toMap(o -> (String) o[0], o -> (Integer) o[1]));

// ④ Guava 可变
Map<String, Integer> map = Maps.newHashMap();

// ⑤ Guava 不可变
Map<String, Integer> map = ImmutableMap.of("a", 1, "b", 2);

2. 读写:日常 API

java 复制代码
map.put("k", 1);                 // 存
map.get("k");                    // 取
map.getOrDefault("k", 0);        // 防 NPE
map.remove("k");                 // 删
map.containsKey("k");            // 判断
map.size();                      // 大小

3. 遍历:4 种姿势

java 复制代码
// ① entrySet(最快)
for (Map.Entry<String, Integer> e : map.entrySet()) {
    System.out.println(e.getKey() + "=" + e.getValue());
}

// ② Java 8 Lambda
map.forEach((k, v) -> System.out.println(k + "=" + v));

// ③ keySet
for (String k : map.keySet()) {
    System.out.println(k + "=" + map.get(k));
}

// ④ Stream
map.entrySet().stream()
              .filter(e -> e.getValue() > 10)
              .forEach(e -> System.out.println(e.getKey()));

4. 计算型 Map:merge / compute

java 复制代码
// 计数器:单词出现次数
map.merge(word, 1, Integer::sum);

// 累加:key 对应的值 + delta
map.compute(key, (k, v) -> v == null ? delta : v + delta);

5. 线程安全:3 种锁策略

java 复制代码
// ① 全表锁(慢)
Map<String, Integer> map = new Hashtable<>();

// ② 分段锁(快)
Map<String, Integer> map = new ConcurrentHashMap<>();

// ③ 不可变(无锁)
Map<String, Integer> map = ImmutableMap.of("a", 1);

6. 顺序 Map:3 种有序实现

java 复制代码
// ① 插入顺序
Map<String, Integer> map = new LinkedHashMap<>();

// ② 访问顺序(LRU)
Map<String, Integer> map = new LinkedHashMap<>(16, 0.75f, true);

// ③ 排序顺序
Map<String, Integer> map = new TreeMap<>();   // 自然序
Map<String, Integer> map = new TreeMap<>(Comparator.reverseOrder()); // 倒序

7. 空值友好:Optional 链

java 复制代码
String name = Optional.ofNullable(map.get("k"))
                      .map(String::valueOf)
                      .orElse("");

8. 黑科技:Map 当作函数缓存

java 复制代码
Map<String, Function<Integer, Integer>> funcMap = Map.of(
        "square", x -> x * x,
        "cube", x -> x * x * x
);

int result = funcMap.getOrDefault("square", x -> x).apply(5); // 25

9. 一行记忆

"HashMap 日常,LinkedHashMap 顺序,TreeMap 排序,ConcurrentHashMap 并发,ImmutableMap 只读,merge 计数,Optional 防空!"

相关推荐
咩咩啃树皮5 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
阳光是sunny5 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
触底反弹6 小时前
一文搞懂 Tailwind CSS 弹性布局:从原理到实战
前端·css·html
阳光是sunny6 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
鱟鲥鳚6 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
小林ixn6 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
REDcker7 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
এ慕ོ冬℘゜7 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery
武子康7 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端
大模型码小白7 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程