如何通过HashMap高阶技巧实现开发效率的十倍飞跃?

2026-04-28 15:182阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计944个文字,预计阅读时间需要4分钟。

如何通过HashMap高阶技巧实现开发效率的十倍飞跃?

%E2%80%9CHashMap%E5%9C%A8%E5%B7%A5%E4%BD%9C%E4%B8%AD%E5%9C%BA%E4%BB%A3%E7%94%A8%E9%9D%9E%E5%B8%B8%E9%A2%91%E7%B9%81%EF%BC%8C%E5%8F%AF%E8%83%BD%E6%98%AF%E6%9C%80%E5%85%B3%E9%94%AE%E7%9A%84%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B9%8B%E4%B8%80%EF%BC%8C%E5%8F%8C%E6%9E%9C%E4%BC%98%E5%8C%96%E4%BA%86%E5%AE%9E%E7%94%A8%E6%80%A7%EF%BC%8C%E5%8F%8C%E6%9E%9C%E6%98%AF%E4%BB%80%E4%B9%88%E5%90%A7%EF%BC%9F%E2%80%9D

1. `get` 方法指定返回默认值(`getOrDefault`):当尝试获取不存在键的值时,使用 `getOrDefault` 方法可以避免返回 `null`,从而提高代码的健壮性。

HashMap在工作中使用非常频繁,其实在JDK1.8的时候新增一些更高阶的用法,熟练使用这些方法可以大大提升开发效率,写出更简洁优美的代码。

1. get方法指定返回默认值(getOrDefault)

Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); String value1 = map.getOrDefault("key1", "defaultValue"); System.out.println(value1); // 输出 value1 // 当不存在key时,返回指定默认值 String value2 = map.getOrDefault("key2", "defaultValue"); System.out.println(value2); // 输出 defaultValue 2. 当key不存在时才执行put方法(putIfAbsent)

Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.putIfAbsent("key1", "newValue"); String value = map.get("key1"); System.out.println(value); // 输出 value1 3. 当key存在时才执行put方法(replace)

Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.replace("key1", "newValue"); map.replace("key2", "value2"); System.out.println(JSON.toJSONString(map)); //输出 {"key1":"newValue"} 4. 当value不存在时重新计算(computeIfAbsent)

有这样一个常见的应用场景,当一批用户按年龄分组之后,新用户怎么加入到分组中?

如何通过HashMap高阶技巧实现开发效率的十倍飞跃?

通常我们这样做的:

public class MapTest { static class User { // 年龄 private Integer age; // 姓名 private String name; } public static void main(String[] args) { // key是年龄,value是用户集合 Map<Integer, List<User>> map = new HashMap<>(); // 来一个新用户 User user = new User(18, "yideng"); List<User> users = map.get(user.getAge()); // 如果没有这个年龄段的用户,就需要创建一个集合 if (users == null) { users = new ArrayList<>(); } users.add(user); map.put(user.getAge(), users); } }

还是老套解决办法,一点都不优雅吧?JDK1.8后你可以这样做了

public static void main(String[] args) { // key是年龄,value是用户集合 Map<Integer, List<User>> map = new HashMap<>(); // 来一个新用户 User user = new User(18, "Yideng"); // 如果没有这个年龄段的用户,直接创建一个集合 List<User> users = map.computeIfAbsent(user.getAge(), k -> new ArrayList<>()); users.add(user); 5. 当value存在时重新计算(computeIfPresent)

public class MapTest { static class User { // 年龄 private Integer age; // 姓名 private String name; } public static void main(String[] args) { // key是年龄,value是用户 Map<Integer, User> map = new HashMap<>(); map.put(18, new User(18,"Yideng")); // 当存在key时,就重新计算value并赋值 map.computeIfPresent(18, (k, v) -> { v.setName("一灯"); return v; }); System.out.println(map); // 输出 {18:{"age":18,"name":"一灯"}} } }

这个方法还有很多其他的应用场景,你认真想一下?

6. 合并新旧两个值(merge)

又有这样一个常见的应用场景,当一批用户按年龄分组之后,一批新用户怎么加入到分组中?

我们可以这样做的:

public class MapTest { static class User { // 年龄 private Integer age; // 姓名 private String name; } public static void main(String[] args) { // key是年龄,value是用户集合 Map<Integer, List<User>> map = new HashMap<>(); List<User> users1 = new ArrayList<>(); users1.add(new User(18, "yideng")); map.put(18, users1); List<User> users2 = new ArrayList<>(); users2.add(new User(18, "一灯")); // 如果key存在,就合并两个集合 map.merge(18, users2, (oldV, v) -> { oldV.addAll(v); return oldV; }); System.out.println(JSON.toJSONString(map)); // 输出 {18:[{"age":18,"name":"yideng"},{"age":18,"name":"一灯"}]} } }

本文共计944个文字,预计阅读时间需要4分钟。

如何通过HashMap高阶技巧实现开发效率的十倍飞跃?

%E2%80%9CHashMap%E5%9C%A8%E5%B7%A5%E4%BD%9C%E4%B8%AD%E5%9C%BA%E4%BB%A3%E7%94%A8%E9%9D%9E%E5%B8%B8%E9%A2%91%E7%B9%81%EF%BC%8C%E5%8F%AF%E8%83%BD%E6%98%AF%E6%9C%80%E5%85%B3%E9%94%AE%E7%9A%84%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B9%8B%E4%B8%80%EF%BC%8C%E5%8F%8C%E6%9E%9C%E4%BC%98%E5%8C%96%E4%BA%86%E5%AE%9E%E7%94%A8%E6%80%A7%EF%BC%8C%E5%8F%8C%E6%9E%9C%E6%98%AF%E4%BB%80%E4%B9%88%E5%90%A7%EF%BC%9F%E2%80%9D

1. `get` 方法指定返回默认值(`getOrDefault`):当尝试获取不存在键的值时,使用 `getOrDefault` 方法可以避免返回 `null`,从而提高代码的健壮性。

HashMap在工作中使用非常频繁,其实在JDK1.8的时候新增一些更高阶的用法,熟练使用这些方法可以大大提升开发效率,写出更简洁优美的代码。

1. get方法指定返回默认值(getOrDefault)

Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); String value1 = map.getOrDefault("key1", "defaultValue"); System.out.println(value1); // 输出 value1 // 当不存在key时,返回指定默认值 String value2 = map.getOrDefault("key2", "defaultValue"); System.out.println(value2); // 输出 defaultValue 2. 当key不存在时才执行put方法(putIfAbsent)

Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.putIfAbsent("key1", "newValue"); String value = map.get("key1"); System.out.println(value); // 输出 value1 3. 当key存在时才执行put方法(replace)

Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.replace("key1", "newValue"); map.replace("key2", "value2"); System.out.println(JSON.toJSONString(map)); //输出 {"key1":"newValue"} 4. 当value不存在时重新计算(computeIfAbsent)

有这样一个常见的应用场景,当一批用户按年龄分组之后,新用户怎么加入到分组中?

如何通过HashMap高阶技巧实现开发效率的十倍飞跃?

通常我们这样做的:

public class MapTest { static class User { // 年龄 private Integer age; // 姓名 private String name; } public static void main(String[] args) { // key是年龄,value是用户集合 Map<Integer, List<User>> map = new HashMap<>(); // 来一个新用户 User user = new User(18, "yideng"); List<User> users = map.get(user.getAge()); // 如果没有这个年龄段的用户,就需要创建一个集合 if (users == null) { users = new ArrayList<>(); } users.add(user); map.put(user.getAge(), users); } }

还是老套解决办法,一点都不优雅吧?JDK1.8后你可以这样做了

public static void main(String[] args) { // key是年龄,value是用户集合 Map<Integer, List<User>> map = new HashMap<>(); // 来一个新用户 User user = new User(18, "Yideng"); // 如果没有这个年龄段的用户,直接创建一个集合 List<User> users = map.computeIfAbsent(user.getAge(), k -> new ArrayList<>()); users.add(user); 5. 当value存在时重新计算(computeIfPresent)

public class MapTest { static class User { // 年龄 private Integer age; // 姓名 private String name; } public static void main(String[] args) { // key是年龄,value是用户 Map<Integer, User> map = new HashMap<>(); map.put(18, new User(18,"Yideng")); // 当存在key时,就重新计算value并赋值 map.computeIfPresent(18, (k, v) -> { v.setName("一灯"); return v; }); System.out.println(map); // 输出 {18:{"age":18,"name":"一灯"}} } }

这个方法还有很多其他的应用场景,你认真想一下?

6. 合并新旧两个值(merge)

又有这样一个常见的应用场景,当一批用户按年龄分组之后,一批新用户怎么加入到分组中?

我们可以这样做的:

public class MapTest { static class User { // 年龄 private Integer age; // 姓名 private String name; } public static void main(String[] args) { // key是年龄,value是用户集合 Map<Integer, List<User>> map = new HashMap<>(); List<User> users1 = new ArrayList<>(); users1.add(new User(18, "yideng")); map.put(18, users1); List<User> users2 = new ArrayList<>(); users2.add(new User(18, "一灯")); // 如果key存在,就合并两个集合 map.merge(18, users2, (oldV, v) -> { oldV.addAll(v); return oldV; }); System.out.println(JSON.toJSONString(map)); // 输出 {18:[{"age":18,"name":"yideng"},{"age":18,"name":"一灯"}]} } }