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

时间:2014-01-26 21:11:22

标签: java arrays queue

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

我应该使用哪种数据结构,是否有示例用法?感谢。

2 个答案:

答案 0 :(得分:0)

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

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方法,就可以确定固定大小。如果你想强制它,你将不得不覆盖更多的方法,使用委托人。

答案 1 :(得分:0)

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