首页IT科技java中的map如何使用(JAVA里Map的一些常用方法)

java中的map如何使用(JAVA里Map的一些常用方法)

时间2025-07-31 14:33:43分类IT科技浏览5305
导读:Map的常用方法 案例1 场景:一张建行用户体验金信息大表(百万级别),里面存在一个字段对多条数据,需要统计某个字段的多条数据累加值以供于别的服务调用。...

Map的常用方法

案例1

场景:一张建行用户体验金信息大表(百万级别)               ,里面存在一个字段对多条数据                        ,需要统计某个字段的多条数据累加值以供于别的服务调用                。

优化前解决:直接查出来一个大list给到另一个服务        ,再另外一个服务里有笛卡尔积算出累加值(笛卡尔积后得到jvm需运算56亿次)               ,程序直接接近崩溃                        ,故需优化                       。

优化思路:首先由于该表是一张大表        ,所以我们不能直接把这百万级别轰到内存中(不然会OOM)       ,我们先分组取出                        ,分组迭代使用Map的Merge方法(源码如下)                ,该方法接收了三个参数       ,一个是Key                       ,一个是value                ,一个是remappingFunction,简单理解                       ,如果给定的key不存在                        ,它就变成了 put(key, value) ;但是,如果 key 已经存在一些值               ,我们 remappingFunction 可以选择合并的方式                        ,然后将合并得到的 newValue 赋值给原先的 key        。

// 源码如下 default V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) { Objects.requireNonNull(remappingFunction); Objects.requireNonNull(value); V oldValue = get(key); V newValue = (oldValue == null) ? value : remappingFunction.apply(oldValue, value); if (newValue == null) { remove(key); } else { put(key, newValue); } return newValue; } 案例2

场景:逻辑需要移除map里特定的key和value元素

优化前解决:遍历找出对应条件        ,程序效率不高               ,很多无效判断

优化思路:使用map jdk1.8新增方法一步解决                        ,remove方法        ,该方法有两个入参       ,一个是key                        ,一个是value        。基本理解                ,仅当指定的 key 关联到指定的 value 时       ,才删除指定的项                       ,删除成功返回 true                       。

// 源码如下 default boolean remove(Object key, Object value) { Object curValue = get(key); if (!Objects.equals(curValue, value) || (curValue == null && !containsKey(key))) { return false; } remove(key); return true; } Map的另外一些新增方法示例 // 原有的Put方法                ,是当Key存在时则替换;而putIfAbsent方法,则是当存在Key忽略Put操作不替换 map.putIfAbsent("K1001", "K1001-1"); // 如果Key存在                       ,则将函数的运算结果作为这个Key对应的Value的新值Put进去 map.computeIfPresent("K1001", (k, v) -> k + v); // 如果Map中不存这个Key对应个的键值对                        ,则Put这个Key和将Key带入函数运算后的结果为Value的键值对;如果Key存在,则忽略Put操作 map.computeIfAbsent("K1002", k -> k); // 只有当Map中键值对同时等于参数Key和Value时才执行删除 map.remove("K1002", "K1002"); // 从Map中获取指定Key的Value的值               ,如果不存在则返回指定的默认值 String vle = map.getOrDefault("K1002", "V1002"); System.out.println(vle); // 遍历 forEach map.forEach((k, v) -> System.out.println(k + " --> " + v));

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
网创是干什么的(网创团队是什么-和月入20W的网创大佬聊天是种什么体验?) 【创作赢红包】项目信息分析表