Java Map迭代器遍历如何对map进行修改、删除、添加

今天笔试过程中碰到了需要在迭代器遍历过程中,对map进行修改,删除、添加的操作,一直没有碰到过这种情况,现在将大致过程记录一下
主要思路:

  1. 通过迭代器遍历,可以用 it.remove() 删除迭代器指向的对象
  2. 通过 entry.setValue() 可以修改当前迭代器指向的对象
  3. 通过将要添加的键值对存入一个临时 map 中,在迭代器结束遍历后,调用 putAll() 方法将键值对添加进 map 中
// 遍历nums,迭代器方法
        boolean flag = true;
        while (flag) {
            // 新建一个临时 treemap,存放遍历一遍map后的结果
            Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
            TreeMap<Integer, Integer> temp = new TreeMap<>();

            while (it.hasNext()) {
                Map.Entry<Integer, Integer> entry = it.next();
                // 取当前的数量 num,计算合并后新魔力的数量 newNum
                int num = (Integer)entry.getValue();
                int newNum = num / 2;
                // 新魔力的数量不为 0,存入临时的 treemap
                // 新魔力的数量为0,直接跳过,到下一个
                if (newNum != 0) {
                    int key = (Integer)entry.getKey();
                    int newKey = key + 2;
                    temp.put(newKey, map.getOrDefault(newKey, 0) + newNum);
                    // 判断当前魔力值,不能被2整除,修改为1,能被2整除,删除掉
                    if (num % 2 != 0) {
                        entry.setValue(num % 2);
                    } else {
                        it.remove();
                    }
                }
            }
            if (temp.size() == 0) flag = false;
            else {
                map.putAll(temp);
            }
        }
  • 16
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值