当前位置: 首页 > 面试题库 >

Java中的环形缓冲区

司徒杜吟
2023-03-14
问题内容

我有一个流时间序列,我有兴趣保留最后4个元素,这意味着我希望能够弹出第一个元素并将其添加到末尾。本质上我需要一个环形缓冲区。

哪个Java集合最适合此用途?向量?


问题答案:

考虑CircularFifoBuffer Apache的Common.Collections。与Queue不同,你不必维护基础集合的有限大小,只要达到极限就可以包装它。

Buffer buf = new CircularFifoBuffer(4);
buf.add("A");
buf.add("B");
buf.add("C");
buf.add("D"); //ABCD
buf.add("E"); //BCDE

由于以下属性,CircularFifoBuffer会为你完成此操作:

  • CircularFifoBuffer是固定大小的先进先出缓冲区,如果已满,它将替换其最早的元素。
  • CircularFifoBuffer的删除顺序基于插入顺序;元素将按照添加顺序相同的顺序删除。迭代顺序与删除顺序相同。
  • add(Object),BoundedFifoBuffer.remove()和BoundedFifoBuffer.get()操作均在固定时间内执行。所有其他操作都在线性时间内或更差的时间执行。
    但是,你也应该考虑到它的局限性-例如,你不能向该集合添加丢失的时间序列,因为它不允许空值。

注意:使用当前的通用集合(4. *)时,必须使用队列。像这样:

Queue buf = new CircularFifoQueue(4);


 类似资料:
  • 环形缓冲区接口 结构体 struct   rt_ringbuffer   环形缓冲区控制块 更多...   枚举 函数 void  rt_ringbuffer_init (struct rt_ringbuffer *rb, rt_uint8_t *pool, rt_int16_t size)   初始化环形缓冲区   void  rt_ringbuffer_reset (struct rt_rin

  • 环形块状缓冲区接口 结构体 struct   rt_rbb_blk   rbb 中的块 更多...   struct   rt_rbb_blk_queue   块队列。这些块在队列中,其 buffer 地址是连续的 更多...   struct   rt_rbb   环形块状缓冲区,简称 rbb 更多...   枚举 函数 void  rt_rbb_init (rt_rbb_t rbb, rt_u

  • 环形缓冲区在处理异步IO时非常实用。它们可以在一端接收随机长度和区间的数据,在另一端以相同长度和区间提供密致的数据块。它们是Queue数据结构的变体,但是它针对于字节块而不是一系列指针。这个练习中我打算向你展示RingBuffer的代码,并且之后你需要对它执行完整的单元测试。 #ifndef _lcthw_RingBuffer_h #define _lcthw_RingBuffer_h #inc

  • 问题内容: 考虑几个并行运行的Web服务器实例。每个服务器都有对单个共享“状态保持器”的引用,该角色的作用是保留来自所有服务器的最新请求。 例如(): 在任何时间点,都可以从监视应用程序中调用“状态保持器”,该应用程序读取了最近的SLA报告请求。 在Java中实现这种生产者-消费者方案的最佳方法是什么,使Web服务器具有比SLA报告更高的优先级? CircularFifoBuffer似乎是容纳请求

  • 环型缓冲区是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流。 构造环型缓冲区 var ringBuffer = new RingBufferStream(); 函数原型 RingBufferStream(int capacity = 8192, bool exposable = true); 参数 描述 capacity 环状缓冲区的最大容量,为2的次方。如:传入12,则

  • 本文向大家介绍C#环形缓冲区(队列)完全实现,包括了C#环形缓冲区(队列)完全实现的使用技巧和注意事项,需要的朋友参考一下 公司项目中经常设计到串口通信,TCP通信,而且大多都是实时的大数据的传输,然后大家都知道协议通讯肯定涉及到什么,封包、拆包、粘包、校验……什么鬼的概念一大堆,说简单点儿就是要一个高效率可复用的缓存区。按照码农的惯性思维就是去百度、谷歌搜索看有没有现成的东西可以直接拿来用,然而