簡體   English   中英

Java中的循環緩沖區?

[英]Circular Buffer in Java?

我需要一個像雙端隊列的數據結構,我相信它被稱為循環緩沖區。

這就是我所做的。

public class MyStack {


    byte[][] orders = {  {0, 1, 2, 3}, {1, 2, 3, 0}, {2, 3, 0, 1}, {3, 0, 1, 2}  };

    byte state      = 0;

    int[] data      = {1, 2, 3, 4};


    void swap(int value){           
        data[state] = value;

        if(state == 3){
            state = 0;

        }else{
            state ++;

        }       
    }

    int[] dump(){

        int[] output = {  
                          data[  orders[state][0]  ],
                          data[  orders[state][1]  ],
                          data[  orders[state][2]  ],
                          data[  orders[state][3]  ],
                       };

        return output;
    }

}

這里的輸出正是我需要的功能類型。 它基本上是一個長度為四的窗口,它通過無限的離散空間或沿數字線移動。

我的問題是:此解決方案有效嗎? 是否有為此功能設計的內置庫? 如果是這樣,值得使用嗎?

對此的一種改進可以是刪除大小為n的2D訂單數組。

byte[][] orders = {  {0, 1, 2, 3}, {1, 2, 3, 0}, {2, 3, 0, 1}, {3, 0, 1, 2}  };

因為如果知道狀態,那么orders數組也可以通過公式動態確定

for(int i =0; i<data.length; i++){
  output[i] = data[(state+i)%data.length];
}

這可以用來返回輸出。

循環緩沖區的典型實現使用兩個索引來標記隊列的第一個和最后一個元素。 無需顯式存儲狀態,因為可以通過索引計算來完成入enqueuedequeue swap方法的更好的名字是rotate

您可以刪除orders數組並將dump實現更改為:

    int[] output = {  
                      data[  (state+0)%4  ],
                      data[  (state+1)%4  ],
                      data[  (state+2)%4  ],
                      data[  (state+3)%4  ],
                   };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM