计算移动小时平均值 并优化
在最近的工作中 有个需求 需要 实时计算 某个数据的 移动小时平均值,就是在最近一小时内 该数据的平均值,按我们正常的思维就是用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;
}
}