成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java實(shí)現(xiàn)循環(huán)隊(duì)列

zorpan / 2960人閱讀

摘要:循環(huán)隊(duì)列,用于保存最新的幾個(gè)值在做一個(gè)監(jiān)控,用于保存最新的監(jiān)控?cái)?shù)據(jù),需要一個(gè)集合存放監(jiān)控?cái)?shù)據(jù),當(dāng)集合滿的時(shí)候,新的監(jiān)控?cái)?shù)據(jù)需要把舊的監(jiān)控給沖掉,只保存最新的監(jiān)控?cái)?shù)據(jù)。

循環(huán)隊(duì)列,用于保存最新的幾個(gè)值

在做一個(gè)監(jiān)控,用于保存最新的監(jiān)控?cái)?shù)據(jù),需要一個(gè)集合存放監(jiān)控?cái)?shù)據(jù),當(dāng)集合滿的時(shí)候,新的監(jiān)控?cái)?shù)據(jù)需要把舊的監(jiān)控給沖掉,只保存最新的監(jiān)控?cái)?shù)據(jù)。下面是一個(gè)簡(jiǎn)單的實(shí)現(xiàn)

import java.io.Serializable;

/**
 * 基于數(shù)據(jù)實(shí)現(xiàn)的循環(huán)隊(duì)列,用于存取最新的固定長(zhǎng)度的數(shù)據(jù)
 *
 * @author WangJun 
 * @version 1.0 15/9/16
 * @since 1.6
 */
public class CycleQueue implements Serializable {

    /**
     * 數(shù)組下一個(gè)索引位置
     */
    private int index;
    /**
     * 循環(huán)隊(duì)列的大小
     */
    private int length;
    /**
     * 是否隊(duì)列已處于循環(huán)轉(zhuǎn)態(tài)
     */
    private boolean cycle;
    /**
     * 存取具體數(shù)據(jù)的容器
     */
    private Object[] data;


    /**
     * 利用指定大小的值初始化循環(huán)隊(duì)列容器
     *
     * @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++;
    }

    /**
     * 獲取目前容器內(nèi)的所有值
     * 注意當(dāng)集合未滿時(shí),未存放值得地方會(huì)返回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;
    }

    /**
     * 獲取容器內(nèi)的最新值
     *
     * @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;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64651.html

相關(guān)文章

  • Java數(shù)據(jù)結(jié)構(gòu)與算法[原創(chuàng)]——隊(duì)列

    摘要:前言數(shù)據(jù)結(jié)構(gòu)與算法專題會(huì)不定時(shí)更新,歡迎各位讀者監(jiān)督。隊(duì)列和棧類似,也是一個(gè)遵循特殊規(guī)則約束的數(shù)據(jù)結(jié)構(gòu)。將沒有元素的隊(duì)列稱之為空隊(duì),往隊(duì)列中插入元素的過程稱之為入隊(duì),從隊(duì)列中移除元素的過程稱之為出隊(duì)。 聲明:碼字不易,轉(zhuǎn)載請(qǐng)注明出處,歡迎文章下方討論交流。 前言:Java數(shù)據(jù)結(jié)構(gòu)與算法專題會(huì)不定時(shí)更新,歡迎各位讀者監(jiān)督。本文介紹數(shù)據(jù)結(jié)構(gòu)中的隊(duì)列(queue)的概念、存儲(chǔ)結(jié)構(gòu)、隊(duì)列的特點(diǎn)...

    韓冰 評(píng)論0 收藏0
  • Java版-數(shù)據(jù)結(jié)構(gòu)-隊(duì)列循環(huán)隊(duì)列

    摘要:為了方便大家查閱,筆者在這里貼出相關(guān)的地址版數(shù)據(jù)結(jié)構(gòu)數(shù)組版數(shù)據(jù)結(jié)構(gòu)棧版數(shù)據(jù)結(jié)構(gòu)隊(duì)列數(shù)組隊(duì)列為了解決數(shù)組隊(duì)列帶來的問題,本篇給大家介紹一下循環(huán)隊(duì)列。 前情回顧 在上一篇,筆者給大家介紹了數(shù)組隊(duì)列,并且在文末提出了數(shù)組隊(duì)列實(shí)現(xiàn)上的劣勢(shì),以及帶來的性能問題(因?yàn)閿?shù)組隊(duì)列,在出隊(duì)的時(shí)候,我們往往要將數(shù)組中的元素往前挪動(dòng)一個(gè)位置,這個(gè)動(dòng)作的時(shí)間復(fù)雜度O(n)級(jí)別),如果不清楚的小伙伴歡迎查看閱讀...

    Lin_YT 評(píng)論0 收藏0
  • [Java并發(fā)-5]用“等待-通知”機(jī)制優(yōu)化循環(huán)等待

    摘要:在這個(gè)等待通知機(jī)制中,我們需要考慮以下四個(gè)要素。何時(shí)等待線程要求的條件不滿足就等待。是會(huì)隨機(jī)地通知等待隊(duì)列中的一個(gè)線程,而會(huì)通知等待隊(duì)列中的所有線程。 由上一篇文章你應(yīng)該已經(jīng)知道,在 破壞占用且等待條件 的時(shí)候,如果轉(zhuǎn)出賬本和轉(zhuǎn)入賬本不滿足同時(shí)在文件架上這個(gè)條件,就用死循環(huán)的方式來循環(huán)等待,核心代碼如下: // 一次性申請(qǐng)轉(zhuǎn)出賬戶和轉(zhuǎn)入賬戶,直到成功 while(!actr.apply...

    fxp 評(píng)論0 收藏0
  • java隊(duì)列

    摘要:實(shí)現(xiàn)隊(duì)列介紹隊(duì)列為特殊的線性表,隊(duì)列的特點(diǎn)先進(jìn)先出,隊(duì)列插入為入隊(duì),隊(duì)列刪除為出對(duì)。實(shí)現(xiàn)這次使用順序隊(duì)列實(shí)現(xiàn)。 Java 實(shí)現(xiàn)隊(duì)列 介紹 隊(duì)列為特殊的線性表,隊(duì)列的特點(diǎn)先進(jìn)先出(FIFO),隊(duì)列插入為入隊(duì),隊(duì)列刪除為出對(duì)。 Java 實(shí)現(xiàn) 這次使用順序隊(duì)列實(shí)現(xiàn)。(使用數(shù)組),why?為什么不直接使用順序表作為底層容器,因?yàn)槿腙?duì)操作執(zhí)行順序表尾插入,時(shí)間復(fù)雜度為O(1) O(1) 普通語...

    沈建明 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<