4

固定サイズ、ノンブロッキング、自動破棄 FIFO キューを表す Java クラスを見つけようとしています (または書き込もうとしています)。(たとえば、キュ​​ーの容量が 100 の場合、項目 101 を配置すると項目 1 が削除され、項目 101 が正常に追加されます。)この質問に対する答えは役に立ちますが、追加の制約があります。 100-1000。

AutoDiscardingDeque<Float>私のキューのアイテムはフロートのみなので、リンクされた質問で説明されているようなものを使用する方が一般的に効率的ですfloat[]System.arraycopy()?

あるいは、私が思いもよらなかったより良い解決策はありますか?

4

3 に答える 3

2

float のみを使用する必要がある場合は、はい、afloat[]が実装に最適です。配列をコピーする必要はまったくありません。「開始位置」と「終了位置」を維持するだけです。容量は既にわかっているため、最初からアレイを作成し、そこから動揺することはありません。

ここでキューのfloat[] 代わりに を使用することをお勧めしているわけではないことに注意してくださいfloat[]。. もちろん、それはDeque<Float>、ボックス化/ボックス化解除のコストを負担せずに、必要な実装を簡単に行うことができないことを意味します...しかし、クライアントコード内で具象クラスを使用するだけで満足している場合は、終了します効率を向上させます。

于 2011-02-11T13:08:10.433 に答える
1

構造に対して多数の数学関連関数、特に平均、最大、最小などの統計関数を実行する必要があると思われる場合は、Apache Commons Math (http://commons.apache) の DescriptiveStatistics を使用できます。 .org/math/userguide/stat.html#a1.2_Descriptive_statistics)。ウィンドウのサイズを設定すると、要素が自動的に維持されます。ただし、フロートではなくダブルが必要なため、完璧なソリューションではない可能性があります。

于 2011-02-11T14:00:56.080 に答える
0

容量が約 100 ~ 1000 の場合、高速である必要があります

高速にする必要がある操作を指定してください。実装は、それをどのように使用するかについて非常に賢明です。インデックスで頻繁にアクセスする必要がある場合は、上記の解決策で十分と思われます

于 2011-02-11T13:09:46.823 に答える