移动小时平均值优化

计算移动小时平均值 并优化

在最近的工作中 有个需求 需要 实时计算 某个数据的 移动小时平均值,就是在最近一小时内 该数据的平均值,按我们正常的思维就是用list或数组形式记录一小时内的所有值,然后求和计算平均值,我做了个小小的优化,就是把总和和总数缓存起来,这样子就不用 每次去求所有数据的和 减少数据量 ,依旧需要用Queue记录所有的数据值 但开始记录的时间与现在的时间相差大于一小时,就将第一个值移除 总值减去 这个值 在去加上新的 这个值 就是 总和 ,然后除以总数 得到平均值,如有错误 或有更优质的方法 ,请大佬明示

 
import java.util.LinkedList;
import java.util.Queue;

public class DataAVG {
    public double total = 0;
    public double count = 0;
    private Queue<Double> queue = new LinkedList<Double>();
    private long recordtime = 0;
    private long starttime =  System.currentTimeMillis();

    public void addData(Double data){
        recordtime = System.currentTimeMillis();
        if (recordtime - starttime > 60 * 60 * 1000){
            double reduce = queue.poll();   //移除元素
           total -= reduce;
           count--;
        }
        //添加元素
        queue.offer(data);
        total += data;
        count++;

    }

    public  double getAVG(){
        if (count == 0) return  -1;
        return  total / count;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

灵神翁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值