定长队列,新元素会把旧元素挤掉

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情
/**
 * 定长队列,新元素会把旧元素挤掉
 * Created by wanghongji on 17-11-24.
 */
public class CircleArrayBlockingQueue<E> extends ArrayBlockingQueue {

    private int capacity = 16;
    final ReentrantLock lock;

    public CircleArrayBlockingQueue(int capacity) {
        super(capacity);
        this.capacity = capacity;
        lock = new ReentrantLock(false);
    }

    /**
     * 队尾增加一个元素。如果队伍满了,则先删掉第一个元素
     * @param value
     * @return
     */
    public boolean addOne(E value) {
        if (value == null) {
            throw new IllegalArgumentException();
        }
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            if (this.size() == this.capacity) {
                this.poll();
            }
            return this.add(value);
        } finally {
            lock.unlock();
        }
    }
}

定长队列的C实现 以后有空就写个博客,算是技术笔记。 队列的特征是先进先出,可以满足许多应用场景需求,下面是自己用C实现的定长循环队列(代码有问题的话欢迎大家指正)。 //这个队列实现暂且定位为“单生产者单消费者模型”。 //在这个循环队列里,"队空"的条件是:队头索引 = 队尾索引, “队满”的条件是:队尾索引加1等于队头索引 //按照惯性思维,队头在左边,队尾在右边,入队是尾右移,索引值增加,出队是队... 阅读详情

相关推荐

Redis 定长队列的探索和实践

本文主要探索在特定业务场景下通过Redis的原生命令实现类MQ的功能,创新式的通过Lua脚本组合Redis的List的基础命令,实现了消息的分组,消息的定长队列,消息的批量消费功能;消费者的消费过程中通过循环遍历游戏列表,然后根据游戏去获取对应的消息对象,但是不同的游戏对应的热度不同,所以在消费端我们通过配置的方式为热门游戏单独开启消费线程进行消费,相当于针对不同游戏配置不同优先级的消费者。消息数据层面,通过单独的List循环维护待消费的游戏维度的数据,每个游戏维度使用定长的List来保存消息。...

lt_xiaodou的博客 616

定长队列新元素顶掉最老元素

import lombok.Data; import java.util.ArrayList; import java.util.List; public class FixedQueue<E> { private Node<E> head = null; private Node<E> tail = null; private int capacity; private int size; public Fixe..

AMGTR的博客 512

基于数组实现定长队列

有时候我们需要一个定长队列,超过的数据会挤掉最先添加的数据 这里提供一个技术数组实现 /*** * data format of offset+separator+operation+separator+identify+separator+key+separator+dataSerial+endMark * */ public class RaftLeaderAppendData implements FixedLengthStoreQueue{ private Integer a

dw147258dw的专栏 537

java-固定长度队列

实现一个队列,当尝试向队列中添加新元素并且它已满时,会自动从其头部驱逐一个元素。我们以仅追加方式插入元素的环。如果我们想要添加新元素的位置上有一个元素,我们只是覆盖给定位置的现有元素。 package learn; import java.util.LinkedList; public class Test { public static void main(String[] args) { LimitedQueue<String> limitedQueue =

Rnan_prince的博客 2604

使用数组实现固定长度队列

使用数组实现固定长度队列,原理简析:   代码实现:  package com.isea.brush; /** * 使用数组实现长度队列结构 * start:队首,拿取一个数,要存放的位置 * end: 队尾,新加一个元素,应该放在哪个位置,只要end到了数组的长度-1,就回到开头 * size: 队列中的元素的个数 * 用来约束start和end,只要size没有到达数组...

fz13768884254的博客 855

【数据结构三】队列

队列结构:Queue,也是一种常见的数据结构。它是一种受限的线性结构,在队尾插入元素,在队首删除元素,先进先出(FIFO,first in first out)。 生活中的队列的案例: 比如:在银行排队办理业务,后到的人只能排在队伍的末端,开始营业时队伍前端的人先办理业务。 程序中的队列的案例: 比如:JS 是单线程的,在执行代码时会有多个任务,这些任务会在线程中排队按顺序依次执行。 队列的实现: 本章基于数组来实现队列结构。 // 封装队列 function Queue() { // 队列中的元素 t

花铛 3919

永失吾爱

永失吾爱,我料到我将来会多么忏悔,我是多么世俗的人哦!

wisdomroof的专栏 1009

设置新元素格式

设置新元素样式 日期:2019.05.20 哪一剑的风情 老先生的力作之一

weixin_43802415的博客 153

C# 队列固定长度队列

固定长度队列,每次往里边插入一个数据,则删除数据,保持队列中数据始终为5个

weixin_51786302的博客 1703

LUA实现数据结构:定长队列

前言 之前发过一篇博文是关于双端队列的。这次的定长队列就基于上次的结构进行改造。 LUA实现数据结构:双端队列 这种数据结构在游戏可见各种记录。例如抽奖记录会不断的更替,后面产生的记录会替代先前的记录。 客户端展示的时候可能需要展示10条,但是你这边存应该存20条之类的。 代码 定长队列实际上是个FIFO的队列,一端进一端出,同时队列的大小固定: 在原本的基础上我们增加了length表示队列当前的长度,一个max_length表示队列的最大长度。 当入队时判断是否大于max_length,大于的话就把先进

与望 760

java队列长度_Java实现固定长度队列

import java.util.Collection;import java.util.Iterator;import java.util.LinkedList;import java.util.Queue;/*** 固定长度队列**/public class LimitQueue implements Queue{//队列长度private int limit;Queue queue = ne...

weixin_36478866的博客 2465

java定长队列

java固定长度队列实现

weixin_40452750的博客 1144

java 定长 队列_Java队列

Java队列是基于Queue这个接口,不同的实现类有不同的性质,不是用数组就是用链表实现。1、先看下这个接口提供的方法都有哪些,再具体看实现。1)boolean add(E e);如果容量不达上限,将元素插入队列,并返回true。2)boolean offer(E e);如果容量不达上限,将元素插入队列,并返回true。当使用capacity-restricted queue时优于add方法,...

weixin_42512494的博客 1450

Redis 定长队列(支持redis集群)

前言 某些业务场景,需要实现原子性的,性能可靠的分布式定长队列,它必须具备以下功能: 队列具备失效期。 队列最大长度为n,并且当元素满了时,拒绝添加新数据。 队列最大长度为n,当元素满时,弹出最早的数据,接受新的数据。 分布式api可以低成本接入和使用。 实现 考虑使用redis来实现 源码 package redistool import ( "github.com/fwhezfwhez/errorx" "github.com/garyburd/redigo/redis" ) // 定长lis

fwhezfwhez的博客 4296

单调队列——定长区间最值问题

本文同步发表于我的 洛谷博客。 一、引入 1.1 定长滑窗问题: 给出一列 nnn 个正整数,和一个固定长度为 kkk 的滑动窗口, 从左到右在数列中滑动这个窗口,找到数列中每个窗口内的最大值。 即对于给定数列 A1∼AnA_1\sim A_nA1​∼An​ (1≤n≤107)(1\le n\le 10^7)(1≤n≤107),求每一个 fi=min⁡j=i−k+1iAjf_i=\min\limits_{j=i-k+1}^{i}A_jfi​=j=i−k+1mini​Aj​。 二、数据维护 2.0 线段树,R

Mars_Dingdang的博客 804

lua定长循环队列

1 --[[ -- 循环队列与顺序队列区别,删除后的空间依可以利用 queue={} queuesize=3 function queue.new()  return {front=0,rear=0} end function isFull(Q)  if Q.front==(Q.rear+1)%queuesize then--   表满   return true  els

dongjingxia的博客 777

Java固定长度队列的实现

package com.gary.util;      import java.util.Collection;   import java.util.Iterator;   import java.util.LinkedList;   import java.util.Queue;      /**   * 固定长度队列   * @author gary   *   */ 

1万+

c++用vector实现定长队列

我们可以用queue或vector实现定长队列,但是如果我们有遍历定长队列的需求的话,使用queue不是一个好的选择,因为queue本身不支持。这里分别提供queue和vector的实现

hanhan的博客 2100

使用定长数组实现队列

使用定长数组实现队列方法很简单: 我们需要:4、 1、一个数组 2、一个能表示数组中还有多少容量的变量 3、一个能表示队首的变量 4、一个能表示队尾的变量` 入队先判断队列还有多少容量,如果容量为0表示队满,则不能在入队。如果容量不为0.则表示队列还有容量。 然后再判断入队后,队尾是不是数组的最后一个节点,如果是,入队后队尾变为0,如果不是队尾+1; 出队表示同样的道理: 如果容量为数组的大小,则表示队列中暂无数据,不能出队,如果容量小于数组则表示,队列存在数据。可以出队。 出队时判断队首是否是数组的最后一

li15006474642的博客 767
上一篇: 5分钟真正理解mysql事务隔离级别和封锁协议
下一篇: scala/java/c++使用murmur3计算hash值保持跨语言之间一致
胡渣大叔
博客等级 码龄20年 11粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值