<p><blockquote id="35EI9BM6">Java精选面试题 (微信小程序): 5000+ 道面试题和选择题, 真实面经 , 简历模版 ,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计、大厂真题等,在线随时刷题!</blockquote></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1108%2F7f85d078j00smly3z0055d200u000fvg00it009x.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="35EI9BKM">Map的数据操作,你是不是还只会put、get?</p><p id="35EI9BKN">Map是我们日常编程中十分常用的数据接口,的在JDK8中,Map引入了几个新方法,可以简化我们对Map中数据的操作。</p><p id="35EI9BKO">目前JDK的最新LTS版本已经更新到21了,这几个在JDK8引入的Map”新“方法其实也是”老“方法了,还没熟练使用也太out了,快来看看你都”学废“了吗?</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1108%2F06637635j00smly40001md200i800g7g009e008c.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/>getOrDefault<br/></p><p id="35EI9BKP">这个方法名很直观,见名知意:尝试获取key对应的值,如果未获取到,就返回默认值。</p><p id="35EI9BKQ">看一个使用的例子,新写法会比老写法更加简洁:</p><pre></pre>foreach</p><p id="35EI9BKR">看方法名也可以知道,这个方法是遍历map的数据使用的。</p><p id="35EI9BKS">如果没有foreach,我们遍历map的时候一般是使用增强for循环,有了这个方法后,可以更加方便使用entry中的key和val:</p><pre></pre>merge</p><p id="35EI9BKT">从名字可以想到,是合并entry使用的,但是具体是怎么合并呢?</p><p id="35EI9BKU">看一下日常最常用的Map实现类HashMap对merge方法的实现。</p><p><blockquote id="35EI9BM7">推荐划水摸鱼神器: https://www.yoodb.com/slack-off/home.html</blockquote></p><pre></pre></p><p id="35EI9BKV">代码比较长,但是实现的效果比较容易描述:这个方法接收3个参数:key、value、function。</p><p><ul><li id="35EI9BLV"></p><p id="35EI9BL0">如果key存在,将value按照function做1次计算后,更新到Map中</p><p></li><li id="35EI9BM0"></p><p id="35EI9BL1">如果key不存在,将key-value放入Map中</p><p></li></ul></p><p id="35EI9BL2">这个方法在某些场景中挺好用的,代码简洁易懂,例如:我们有1个List,要统计List中每个元素出现的次数。我们要实现的逻辑是,遍历List中的每个元素,如果这个元素在Map中存在,Map中的值+1;如果不存在,则放入Map中,次数(值)为1。</p><pre></pre></p><p id="35EI9BL3">可以看到我们使用merge方法的话,只用1行就简洁实现了这个逻辑。</p><p>putIfAbsent</p><p id="35EI9BL4">也是一个见名知意的方法:不存在key或者值为null时,才将键值对放入Map。跟put方法相比,这个方法不会直接覆盖已有的值,在不允许覆盖旧值的场景使用起来会比较简洁。</p><pre></pre>computer</p><p id="35EI9BL5">computer方法需要传入2个参数:key、function。主要有3步操作</p><p><ul><li id="35EI9BM1"></p><p id="35EI9BL6">获取到key对应的oldValue,可能为null</p><p></li><li id="35EI9BM2"></p><p id="35EI9BL7">经过function计算获取newValue</p><p></li><li id="35EI9BM3"></p><p id="35EI9BL8">put(key, newValue)</p><p></li></ul></p><p id="35EI9BL9">还是以刚刚统计单次次数需求为例,看一下computer的写法:</p><pre></pre>computeIfAbsent</p><p id="35EI9BLA">看名字就知道是compute方法衍生出来的方法,这个方法只在key不存在的时候,执行computer计算,如果说key对应的value存在,就直接返回这个value。</p><p id="35EI9BLB">例如,我们需要计算斐波那锲数列的时候,可以使用这个方法来简化代码:</p><pre></pre>computeIfPresent</p><p id="35EI9BLC">这个是computeIfAbsent的姊妹方法,区别在于,这个方法是只有key存在的时候,才去执行computer计算和值的更新。</p><p>replace</p><p id="35EI9BLD">这个方法的效果是:</p><p><ul><li id="35EI9BM4"></p><p id="35EI9BLE">如果key存在,则更新值</p><p></li><li id="35EI9BM5"></p><p id="35EI9BLF">如果key不存在,什么也不做</p><p></li></ul>总结</p><p id="35EI9BLG">可以看到,这些JDK8引入的Map的方法,都可以在某些特定场景下简化我们的代码,虽然不嫌麻烦的话,put、get等方法都可以搞定,让我想起一张远古的图</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1108%2F2abe59baj00smly40000dd2008b0063g008b0063.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="35EI9BLH">不过在不同的场景使用不同的方法,尽量把代码写的简洁和优雅,才是一个程序猿不断追求的目标吧。</p><p><blockquote id="35EI9BM8">作者:podongfeng 来源:https://juejin.cn/post/7342420969879093299</blockquote></p><p id="35EI9BLK">公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!</p><p id="35EI9BLL">最近有很多人问,有没有<strong>技术或摸鱼</strong>交流群!加入方式很简单,公众号<strong>Java精选</strong>,回复“<strong>加群</strong>”,即可入群!在线摸鱼:https://www.yoodb.com/<br/></p><p id="35EI9BLM"><strong>Java精选面试题</strong>(微信小程序):<strong>3000+</strong>道面试题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计等,在线随时刷题!</p><p id="35EI9BLO">特别推荐:专注分享最前沿的技术与资讯,为弯道超车做好准备及各种开源项目与高效率软件的公众号,<strong>「大咖笔记」</strong>,专注挖掘好东西,非常值得大家关注。<strong>点击下方公众号卡片关注</strong>。</p><p id="35EI9BLS">文章有帮助的话,点在看,转发吧!</p>
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/185532.html