固定大小的Java队列数据结构

固定大小的Java队列数据结构,java,arrays,queue,Java,Arrays,Queue,每隔几毫秒就有一个网络数据流。我需要删除第一个元素,并在发生这种情况时在固定大小的列表末尾添加一个元素(即“shift”)。元素是简单的floats 我应该使用什么样的数据结构,是否有使用示例?谢谢。你有几个选择。当然,最简单的方法就是使用队列,Java为您提供了一些实现(,)。您可以覆盖其中任何一个以添加移位方法: public E shift(E newElement) { E old = take(); put(newElement); return old; }

每隔几毫秒就有一个网络数据流。我需要删除第一个元素,并在发生这种情况时在固定大小的列表末尾添加一个元素(即“shift”)。元素是简单的
float
s


我应该使用什么样的数据结构,是否有使用示例?谢谢。

你有几个选择。当然,最简单的方法就是使用
队列
,Java为您提供了一些实现(,)。您可以覆盖其中任何一个以添加移位方法:

public E shift(E newElement) {
    E old = take();
    put(newElement);
    return old;
}
要使此线程安全,需要进行一些同步

如果出于某种原因,您更喜欢其他系列,这也是可能的。请注意,这些可能不是线程安全的。我不会使用ArrayList,因为它相当复杂,但LinkedList应该可以。覆盖它将需要此转换:

public E shift(E newElement) {
    E old = getFirst();
    addLast(newElement);
    return old;
}

只要只使用shift方法,就可以确保固定大小。如果你想强制执行,你必须覆盖更多的方法,比如使用delegator。

我不知道你想如何从这个不断变化的队列中访问数据,但我建议使用
LinkedBlockingQueue
ArrayBlockingQueue
以及一个线程来等待和处理输入。您可以从任何线程(例如,您的网络线程)向队列添加元素,并在元素可用时处理它们。通过这种方式,可以保证不会丢失与当前方法不同的任何数据(因为如果写入的元素多于处理的元素,则数据将丢失,除非在处理数据时阻止写入)