遍历数组往HashMap中存放对象时一种比较优雅的写法

在遍历某个list并存放至HashMap中时,一般写法是先判断某个key是否已经存在,再根据情况存入数,经常会把代码写的较复杂,如下:

  • 要求 遍历数组nums[],将每个数组出现次数存放至HashMap中
  • 代码
        int[] nums = {1,2,3,4,4,5,5,1,1,1};
        HashMap<Integer,Integer> map = new HashMap<>();
        for (int x : nums) {
            if (map.containsKey(x)) { //若已存在key,则加1
                map.put(x,map.get(x)+1);
            }
            else {
                map.put(x,1); //如key不存在,初始化为1
            }
        }

下面提供一种比较简单直观的写法

        int[] nums = {1,2,3,4,4,5,5,1,1,1};
        HashMap<Integer,Integer> map = new HashMap<>();
        final int Default = 0;
        for (int x : nums) {
            map.put(x,map.getOrDefault(x,Default)+1);
        }

这里使用了HashMap的getOrDefault方法,它的源码是这样的

    public V getOrDefault(Object key, V defaultValue) {
        Node<K,V> e;
        return (e = getNode(hash(key), key)) == null ? defaultValue : e.value;
    }

首先返回值是一个V类型,即返回的是value,方法需要传入两个参数,分别是key和defaultValue,使用了三目运算符?:来判断,如果该HashMap中没有该Key对应的节点,则返回defaultValue,如果有,则返回该key对应的value
所以map.put(x,map.getOrDefault(x,Default)+1);这一行代码的意思就是

  • 如果x对应的key已经存在,则执行map.put(x,map.get(x)+1)
  • 如果x对应的key不存在,则执行map.put(x,Default+1),其中Default初始值我们在外面定义为0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值