繁体   English   中英

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

[英]Java queue data structure with fixed size

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

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

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

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方法,就可以确定大小固定。 如果要强制执行此操作,则必须覆盖使用委托者的更多方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM