4

タイトルが示すように、コレクションに挿入された最後の N 個のオブジェクトのみを保持する Java コレクションを探しています。この FIFO コレクションは、ランダム アクセスを実装する必要も、N の変更をサポートする必要もありません。

私が見つけることができるすべてのコレクションは、ブロッキング ( LinkedBlockingQueue ) または無制限のサイズ ( ArrayDeque ) です。org.eclipse.jetty.util.ArrayQueue を見つけましたが、ご想像のとおり、これは私のプロジェクトに不要な依存関係をもたらし、N の変更をサポートしているため非常に複雑なので、必要なものではありません。

非常に一般的なJavaライブラリでそれを行う方法があるかどうか知っていますか、それとも自分で書く必要がありますか?

4

3 に答える 3

6

Apache Commons CircularFifoBufferを確認してください

CircularFifoBuffer は、いっぱいになった場合に最も古い要素を置き換える固定サイズの先入れ先出しバッファーです。

CircularFifoBuffer の削除順序は、挿入順序に基づきます。要素は、追加されたのと同じ順序で削除されます。反復順序は削除順序と同じです。

于 2012-08-07T16:59:09.953 に答える
2

Guava 15.0 以降には、いっぱいになった場合に最も古い要素を置き換える固定サイズの EvictingQueue があります。

于 2014-03-26T01:01:10.970 に答える
2

プライベート Queue または Deque インスタンスと、クライアントが余分なメンバーを挿入しようとしたときにキューが既にいっぱいになっている場合に必要に応じて動作するパブリック挿入メソッドを含むラッパー クラスを作成するだけです。サイズはコンストラクターを介して渡すことができ、Queue または Deque に属し、利用可能である必要があるが既に必要に応じて動作しているメソッドは、単にプライベート インスタンスに転送することができます。

于 2012-08-07T17:45:46.730 に答える