【问题标题】:Java queue data structure with fixed size固定大小的Java队列数据结构
【发布时间】:2014-01-26 21:11:21
【问题描述】:

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

我应该使用什么数据结构,有示例用法吗?

【问题讨论】:

    标签: java arrays queue


    【解决方案1】:

    您有多种选择。最简单的方法当然是使用Queue,Java 为您提供了一些实现(arrayblocking、concurrentlinked)。您可以覆盖其中任何一个以添加 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 方法,就可以确定固定大小。如果你想强制它,你将不得不覆盖更多的方法,使用委托。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-13
        • 2016-11-14
        • 1970-01-01
        • 2013-02-16
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多