构建HashMap中setAll()方法

构建HashMap中setAll方法

1. 描述

问题描述: 重新构建HashMap的put(),get()方法,并添加setAll()方法,setAll()方法会将当前所有key对应的value值改为参数值。

2. 流程

  1. time记录当前put数据的时刻,每次加1;
  1. all用于存放setAll的数据;
  1. setAllTime记录setAll数据的时刻,同时time加1;
  1. newHashMap内部的HashMap存放的键值对为:< key,(value,time) >,用time标志记录数据进入的时刻;
  1. get数据时,判断存入时间time与setAllTime的大小,如果其小于setAllTime,说明当前value已经被all替换,返回all的值;如果大于,则说明value值是在setAll后添加的,则获取得到原本的value值。

3. 实现

//以HashMap<Integer,Integer>为例:

class NewHashMap{

    class Combine{ // 存放value和time值
        Integer value;
        Long time;
        public Combine(Integer value, Long time) {
            this.value = value;
            this.time = time;
        }
    }
    private int all = 0;
    private long time = 0;
    private long setAllTime = Long.MIN_VALUE; // 默认最小值
    
    private HashMap<Integer,Combine> hashMap = new HashMap<>(); // 内部存储结构

    public void put(Integer key,Integer value){ // put方法
        hashMap.put(key,new Combine(value,time++));
    }
    
    public void setAll(int all){ //setAll方法
        this.all = all;
        this.setAllTime = this.time++;
    }
    
    public Integer get(Integer key){ // get方法
        if(hashMap.get(key).time<setAllTime)
            return all;
        else
            return hashMap.get(key).value;
    }
    
}

4. 测试

NewHashMap newHashMap = new NewHashMap();

newHashMap.put(1,3);
newHashMap.put(2,4);
newHashMap.put(7,6);

System.out.println(newHashMap.get(2)); // 4
System.out.println(newHashMap.get(7)); // 6

newHashMap.setAll(12); // setAll为12

System.out.println(newHashMap.get(1)); // 12
System.out.println(newHashMap.get(2)); // 12
System.out.println(newHashMap.get(7)); // 12

newHashMap.put(6,9);
System.out.println(newHashMap.get(6)); // 9

newHashMap.setAll(6); // setAll为6

System.out.println(newHashMap.get(1)); // 6
System.out.println(newHashMap.get(2)); // 6
System.out.println(newHashMap.get(7)); // 6

newHashMap.put(1,4);
System.out.println(newHashMap.get(1)); // 4
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苡荏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值