美文网首页
定长队列保存最后N个元素

定长队列保存最后N个元素

作者: 明训 | 来源:发表于2021-04-25 00:59 被阅读0次

需求背景

  • 队列满了时候再添加元素,会自动弹出先进来的元素,再在后面添加
  • 一个固定长度的集合里,当收到新的数据并且已经达到限制长度时自动丢掉最旧的数据这样的队列结构
  • 一个大小固定的队列,每次插入数据后最新的数据被删除,就类似一个圈,每次加入新元素后旧元素被覆盖
  • 定长队列,新元素会把旧元素挤掉

解决方案

guava工具包

Guava现在有一个EvictingQueue, 一个非阻塞队列,当尝试向队列中添加新元素并且它已满时,会自动从其头部驱逐一个元素。我们可以把EvictingQueue想象成一个我们以仅追加方式插入元素的环。如果我们想要添加新元素的位置上有一个元素,我们只是覆盖给定位置的现有元素。

引入maven依赖

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>28.0-jre</version>
</dependency>

编写代码

 public static void main(String[] args) {
    Queue<String> queue =  EvictingQueue.create(3);
    queue.add("1");
    queue.add("2");
    queue.add("3");
    System.out.println(queue.contains("1"));
    queue.add("4");
    queue.add("5");
    System.out.println(queue.contains("1"));
    System.out.println(queue.contains("3"));
}

commons-collections4工具包

CircularFifoQueue is a first-in first-out queue with a fixed size that replaces its oldest element if full.

如果您使用的是较早版本的Apache commons集合(3.x),则可以使用 CircularFifoBuffer 基本上没有泛型。

引入maven依赖

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.3</version>
</dependency>

编写代码

 public static void main(String[] args) {
     CircularFifoQueue<String> queue = new CircularFifoQueue<String>(3);
     queue.add("1");
     queue.add("2");
     queue.add("3");
     System.out.println(queue.contains("1"));
     queue.add("4");
     queue.add("5");
     System.out.println(queue.contains("1"));
     System.out.println(queue.contains("3"));
}

资料参考

相关文章

  • 定长队列保存最后N个元素

    需求背景 队列满了时候再添加元素,会自动弹出先进来的元素,再在后面添加 一个固定长度的集合里,当收到新的数据并且已...

  • 保存最后n个元素

    本系列来自python cookbook 问题 有时候,我们只需要保留最新的几个元素。比如,最新的二十件新鲜事;再...

  • 保存最后N个元素

  • Python CookBook 笔记 | deque

    deque(maxlen = n) 创建一个固定长度的队列,当有新的数据加入队列会自动移除最早的数据 添加元素到队...

  • 经典面试题--两个队列实现一个栈

    1. 实现原理 一个队列加入元素,弹出元素时,需要把队列中的 元素放到另外一个队列中,删除最后一个元素;两个队列始...

  • collections.deque -- 队列的使用

    deque(maxlen=N)创建一个固定长度的队列。当有新纪录加入而队列已满时会自动移除最老的那条记录。 如果不...

  • 用队列实现栈

    思路:每次取值要取队列的队尾元素,数据队列A出队到辅助队列B,留下最后一个元素返回,辅助队列再把元素出队到数据队列。

  • 阻塞队列

    BlockingQueue 获取元素的时候等待队列里有元素,否则阻塞保存元素的时候等待队列里有空间,否则阻塞用来简...

  • 库目录

    数组和切片 数组是固定长度的,保存的是值类型 切片是不固定长度的,保存的是底层数组的引用 切片可以添加元素,容量不...

  • 两个栈实现队列+两个队列实现栈

    两个队列实现栈:把非空队列的n-1个压人空对列,剩的第n个出队...即总有一个队列为空 两个栈实现队列:所有元素进...

网友评论

      本文标题:定长队列保存最后N个元素

      本文链接:https://www.haomeiwen.com/subject/bhmrrltx.html