福州JAVA培训
达内福州JAVA培训中心

13732203138

热门课程

达内:Java中实现循环队列

  • 时间:2015-12-22
  • 发布:福州java培训
  • 来源:PHPERZ


    福州达内Java培训专家介绍Java实现循环队列的方法,便于达内Java学员提升Java开发水平。

    循环队列,保存最新数据的方法

    我们需要一个集合存放监控数据,当集合满的时候,新的监控数据需要把旧的监控给冲掉,只保存最新的监控数据。下面是一个简单的实现

import java.io.Serializable;

/**
 * 基于数据实现的循环队列,用于存取最新的固定长度的数据
 *
 * @author WangJun <wangjuntytl@163.com>
 * @version 1.0 15/9/16
 * @since 1.6
 */
public class CycleQueue<E> implements Serializable {

    /**
     * 数组下一个索引位置
     */
    private int index;
    /**
     * 循环队列的大小
     */
    private int length;
    /**
     * 是否队列已处于循环转态
     */
    private boolean cycle;
    /**
     * 存取具体数据的容器
     */
    private Object[] data;


    /**
     * 利用指定大小的值初始化循环队列容器
     *
     * @param length
     */
    public CycleQueue(int length) {
        this.length = length;
        data = new Object[length];
    }

    /**
     * 线程安全的存入最新值到容器中
     *
     * @param value
     */
    public synchronized void push(E value) {
        if (index >= length) {
            index = index - length;
            cycle = true;
        }
        data[index] = value;
        index++;
    }

    /**
     * 获取目前容器内的所有值
     * 注意当集合未满时,未存放值得地方会返回null
     *
     * @return
     */
    public Object[] get() {
        Object[] truthData = new Object[length];
        int currentIndex = (index - 1);
        if (cycle) {
            for (int i = (length - 1); i >= 0; i--) {
                if (currentIndex < 0) {
                    truthData[i] = data[currentIndex + length];
                } else {
                    truthData[i] = data[currentIndex];
                }
                currentIndex--;
            }
        } else {
            return data;
        }
        return truthData;
    }

    /**
     * 获取容器内的最新值
     *
     * @return the latest value
     */
    public E getCurrentValue() {
        int currentIndex = (index - 1);
        if (currentIndex < 0) currentIndex = 0;
        return (E) data[currentIndex];
    }

    @Override
    public String toString() {
        Object[] data = get();
        String res = "[ ";
        for (Object object : data) {
            res += object + ",";
        }
        res = res.substring(0, res.length() - 1);
        res += " ]";
        return res;
    }
}


上一篇:达内分析Java多线程同步与synchronized
下一篇:达内:Java泛型之类型擦除

达内教育蝉联荣登“2016百度数字资产榜单”职业教育类第一名

795万高校毕业生创历史新高,2017届毕业生就业近况几何?

恭喜达内获得《产学合作协同育人项目合作伙伴奖》

达内Java大数据捷报频传,最高薪资15000元

选择城市和中心
贵州省

广西省

海南省

//追踪代码 function eventGetPath(ele,path_arr) { path_arr.push(ele); if(ele.parentNode.tagName=='body'||ele.parentNode.tagName=='BODY'){ return path_arr; }else { return eventGetPath(ele.parentNode,path_arr); } } document.getElementsByTagName('body')[0].onclick=function(event){ /** * event解决浏览器兼容 * @type {*|Event} */ event=event||window.event; event.target=event.target||event.srcElement; /** * 解决event.path的浏览器兼容 */ var path=event.path||eventGetPath(event.target,[]); /** * * 判断是否为提交按钮 * */ var url=location.href.split('?')[1]; var zhengze=new RegExp("#"); if(url==undefined){ url=location.href.split('?')[1]; } url=(url!==undefined)?'?'+url.split('#')[0]:""; for(var i=0;i(function() {var _53code = document.createElement("script");_53code.src = "https://tb.53kf.com/code/code/10111857/2";var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(_53code, s);})();