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

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

时间2025-06-15 12:03:03分类IT科技浏览4898
导读: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
kiwi浏览器是哪个公司的(kiwi浏览器下载及介绍) 养猫赚钱还是养狗赚钱(网上如何赚钱-网上“养猫”还能赚钱?他们已经被骗得血本无归!)