2014-01-26 42 views
0

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

我应该使用哪种数据结构,并且有一个示例用法?谢谢。

回答

0

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

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; 
} 

只要你只使用移位方法,你可以肯定的是固定的大小。如果你想强制它,你将不得不覆盖更多的方法,使用委托人。

0

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