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 防空!"

相关推荐
云烟成雨TD20 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
Csvn20 小时前
🌟 LangChain 30 天保姆级教程 · Day 13|OutputParser 进阶!让 AI 输出自动转为结构化对象,并支持自动重试!
python·langchain
于慨20 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
石小石Orz20 小时前
油猴脚本实现生产环境加载本地qiankun子应用
前端·架构
swg32132120 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
从前慢丶20 小时前
前端交互规范(Web 端)
前端
gelald20 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川20 小时前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月20 小时前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
CHU72903520 小时前
便捷约玩,沉浸推理:线上剧本杀APP功能版块设计详解
前端·小程序