/**
* 定长队列,新元素会把旧元素挤掉
* 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();
}
}
}相关推荐
Redis 定长队列的探索和实践
本文主要探索在特定业务场景下通过Redis的原生命令实现类MQ的功能,创新式的通过Lua脚本组合Redis的List的基础命令,实现了消息的分组,消息的定长队列,消息的批量消费功能;消费者的消费过程中通过循环遍历游戏列表,然后根据游戏去获取对应的消息对象,但是不同的游戏对应的热度不同,所以在消费端我们通过配置的方式为热门游戏单独开启消费线程进行消费,相当于针对不同游戏配置不同优先级的消费者。消息数据层面,通过单独的List循环维护待消费的游戏维度的数据,每个游戏维度使用定长的List来保存消息。...
定长队列,新元素顶掉最老元素
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..
基于数组实现定长队列
有时候我们需要一个定长的队列,超过的数据会挤掉最先添加的数据 这里提供一个技术数组实现 /*** * data format of offset+separator+operation+separator+identify+separator+key+separator+dataSerial+endMark * */ public class RaftLeaderAppendData implements FixedLengthStoreQueue{ private Integer a
java-固定长度的队列
实现一个队列,当尝试向队列中添加新元素并且它已满时,会自动从其头部驱逐一个元素。我们以仅追加方式插入元素的环。如果我们想要添加新元素的位置上有一个元素,我们只是覆盖给定位置的现有元素。 package learn; import java.util.LinkedList; public class Test { public static void main(String[] args) { LimitedQueue<String> limitedQueue =
使用数组实现固定长度的队列
使用数组实现固定长度的队列,原理简析: 代码实现: package com.isea.brush; /** * 使用数组实现长度队列结构 * start:队首,拿取一个数,要存放的位置 * end: 队尾,新加一个元素,应该放在哪个位置,只要end到了数组的长度-1,就回到开头 * size: 队列中的元素的个数 * 用来约束start和end,只要size没有到达数组...
【数据结构三】队列
队列结构:Queue,也是一种常见的数据结构。它是一种受限的线性结构,在队尾插入元素,在队首删除元素,先进先出(FIFO,first in first out)。 生活中的队列的案例: 比如:在银行排队办理业务,后到的人只能排在队伍的末端,开始营业时队伍前端的人先办理业务。 程序中的队列的案例: 比如:JS 是单线程的,在执行代码时会有多个任务,这些任务会在线程中排队按顺序依次执行。 队列的实现: 本章基于数组来实现队列结构。 // 封装队列 function Queue() { // 队列中的元素 t
永失吾爱
永失吾爱,我料到我将来会多么忏悔,我是多么世俗的人哦!
设置新元素格式
设置新元素样式 日期:2019.05.20 哪一剑的风情 老先生的力作之一
C# 队列及固定长度的队列
固定长度的队列,每次往里边插入一个数据,则删除旧数据,保持队列中数据始终为5个
LUA实现数据结构:定长队列
前言 之前发过一篇博文是关于双端队列的。这次的定长队列就基于上次的结构进行改造。 LUA实现数据结构:双端队列 这种数据结构在游戏可见各种记录。例如抽奖记录会不断的更替,后面产生的记录会替代先前的记录。 客户端展示的时候可能需要展示10条,但是你这边存应该存20条之类的。 代码 定长队列实际上是个FIFO的队列,一端进一端出,同时队列的大小固定: 在原本的基础上我们增加了length表示队列当前的长度,一个max_length表示队列的最大长度。 当入队时判断是否大于max_length,大于的话就把先进
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...
java之定长队列
java固定长度的队列实现
java 定长 队列_Java队列
在Java中队列是基于Queue这个接口,不同的实现类有不同的性质,不是用数组就是用链表实现。1、先看下这个接口提供的方法都有哪些,再具体看实现。1)boolean add(E e);如果容量不达上限,将元素插入队列,并返回true。2)boolean offer(E e);如果容量不达上限,将元素插入队列,并返回true。当使用capacity-restricted queue时优于add方法,...
Redis 定长队列(支持redis集群)
前言 某些业务场景,需要实现原子性的,性能可靠的分布式定长队列,它必须具备以下功能: 队列具备失效期。 队列最大长度为n,并且当元素满了时,拒绝添加新数据。 队列最大长度为n,当元素满时,弹出最早的数据,接受新的数据。 分布式api可以低成本接入和使用。 实现 考虑使用redis来实现 源码 package redistool import ( "github.com/fwhezfwhez/errorx" "github.com/garyburd/redigo/redis" ) // 定长lis
单调队列——定长区间最值问题
本文同步发表于我的 洛谷博客。 一、引入 1.1 定长滑窗问题: 给出一列 nnn 个正整数,和一个固定长度为 kkk 的滑动窗口, 从左到右在数列中滑动这个窗口,找到数列中每个窗口内的最大值。 即对于给定数列 A1∼AnA_1\sim A_nA1∼An (1≤n≤107)(1\le n\le 10^7)(1≤n≤107),求每一个 fi=minj=i−k+1iAjf_i=\min\limits_{j=i-k+1}^{i}A_jfi=j=i−k+1miniAj。 二、数据维护 2.0 线段树,R
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
(Java)固定长度队列的实现
package com.gary.util; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; import java.util.Queue; /** * 固定长度队列 * @author gary * */
c++用vector实现定长队列
我们可以用queue或vector实现定长队列,但是如果我们有遍历定长队列的需求的话,使用queue不是一个好的选择,因为queue本身不支持。这里分别提供queue和vector的实现
使用定长数组实现队列
使用定长数组实现队列方法很简单: 我们需要:4、 1、一个数组 2、一个能表示数组中还有多少容量的变量 3、一个能表示队首的变量 4、一个能表示队尾的变量` 入队先判断队列还有多少容量,如果容量为0表示队满,则不能在入队。如果容量不为0.则表示队列还有容量。 然后再判断入队后,队尾是不是数组的最后一个节点,如果是,入队后队尾变为0,如果不是队尾+1; 出队表示同样的道理: 如果容量为数组的大小,则表示队列中暂无数据,不能出队,如果容量小于数组则表示,队列存在数据。可以出队。 出队时判断队首是否是数组的最后一
616




被折叠的 条评论
为什么被折叠?



