国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java實現循環隊列

zorpan / 2926人閱讀

摘要:循環隊列,用于保存最新的幾個值在做一個監控,用于保存最新的監控數據,需要一個集合存放監控數據,當集合滿的時候,新的監控數據需要把舊的監控給沖掉,只保存最新的監控數據。

循環隊列,用于保存最新的幾個值

在做一個監控,用于保存最新的監控數據,需要一個集合存放監控數據,當集合滿的時候,新的監控數據需要把舊的監控給沖掉,只保存最新的監控數據。下面是一個簡單的實現

import java.io.Serializable;

/**
 * 基于數據實現的循環隊列,用于存取最新的固定長度的數據
 *
 * @author WangJun 
 * @version 1.0 15/9/16
 * @since 1.6
 */
public class CycleQueue 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;
    }
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64651.html

相關文章

  • Java數據結構與算法[原創]——隊列

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

    韓冰 評論0 收藏0
  • Java版-數據結構-隊列循環隊列

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

    Lin_YT 評論0 收藏0
  • [Java并發-5]用“等待-通知”機制優化循環等待

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

    fxp 評論0 收藏0
  • java隊列

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

    沈建明 評論0 收藏0

發表評論

0條評論

zorpan

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<