public
class
CircleQueue<T> {
ReentrantLock reentrantLock =
new
ReentrantLock();
private
int
capacity =
5
;
private
int
current =
0
;
private
LinkedBlockingQueue<T>[] array =
new
LinkedBlockingQueue[capacity];
public
CircleQueue(){
}
public
CircleQueue(
int
capacity){
this
.capacity = capacity;
}
public
void
addData(T t) {
reentrantLock.lock();
LinkedBlockingQueue<T> clircleData =
null
;
clircleData = array[(current + capacity -
1
) % capacity];
if
(
null
== clircleData){
clircleData =
new
LinkedBlockingQueue<>();
array[(current + capacity -
1
) % capacity] = clircleData;
}
clircleData.add(t);
reentrantLock.unlock();
}
public
LinkedBlockingQueue<T> getData() {
reentrantLock.lock();
LinkedBlockingQueue<T> clircleData = array[current++%capacity];
reentrantLock.unlock();
return
clircleData;
}
public
static
void
main(String[] args) {
CircleQueue circleQueue =
new
CircleQueue();
circleQueue.addData(
"王伟"
);
Timer timer =
new
Timer(
false
);
timer.schedule(
new
TimerTask() {
@Override
public
void
run() {
LinkedBlockingQueue queue = circleQueue.getData();
if
(
null
!= queue){
System.out.println(queue.poll());
}
else
{
System.out.println(queue);
}
}
},
1000
,
1000
);
}
}
相关推荐
本部分将深入探讨Java中如何实现环形队列,以及其在实际应用中的价值。 环形队列是线性数据结构的一种变体,它的结构类似于一个圆环,一端插入元素,另一端删除元素。相比于普通数组队列,环形队列具有更好的空间...
环形队列 1)front变量的含义做一个调整:front就指向队列的第一个元素,也就是说arffront]就是 队列的第一个元素front的初始值=0 2)rear变量的含义做一个调整:rear指向队列的最后一个元素的后一个位置.因为希望...
在Java中实现环形队列,通常会使用数组或链表作为底层数据容器。本教程将深入讲解如何在Java中创建和操作环形队列,以及它在数据结构和算法中的应用。 首先,理解环形队列的基本概念至关重要。队列是一种先进先出...
1. **环形队列**:创建一个包含3600个槽位(slot)的环形队列,每个槽位对应一秒。环形队列本质上是一个循环数组。 2. **任务集合**:每个槽位存储一个`Set<Task>`,其中`Task`包含了待执行的任务信息。 3. **周期...
自己写的一个环形队列,用来处理数据,方便使用。项目中用到,方便用的到的人使用
在循环队列中,当队尾指针达到数组末尾时,会重新回到数组的起始位置,从而形成一个逻辑上的环形结构。 循环队列的回绕过程: 1. 当队列已满,队尾指针指向数组末尾。 2. 移除队首元素后,队头指针向后移动,但队尾...
环形缓存存储器,又称为循环缓冲区或环形队列,是一种高效的数据存储结构,广泛应用于多进程通信、数据采集系统、网络协议栈等多个领域。它的主要特点是利用有限的固定大小内存空间,通过“首地址”和“尾地址”的...
环形缓冲数组的设计灵感来自于环形队列,它提供了一种在有限空间内循环存放元素的方式,具有先进先出(FIFO)的特性。 环形缓冲数组的基本概念是数组的首尾相连,形成一个闭合的环。当数组填满时,新的元素会覆盖旧...
循环队列是一种特殊的线性数据结构,它通过在数组末尾与开头相连形成一个逻辑上的环形空间,解决了普通数组作为队列时可能出现的溢出问题。下面将详细解释其中涉及的知识点: 1. **循环队列的基本概念**: 循环...
"Stack_Queue"可能是包含Java代码的文件,可能包括了栈和队列的基本操作的示例代码,比如使用数组或链表实现,以及针对Google面试中可能出现的题目,如最小栈、环形队列等的解决方案。这些代码实例可以帮助学习者...
在编程实现上,可扩充循环队列可以使用各种编程语言来构建,如C、C++、Java、Python等。关键在于理解和实现队列的扩展机制,以及正确处理边界条件和队列扩展时的数据迁移。在设计时,还需要考虑内存管理和并发安全...
本次实现了数据结构的环形队列,较之队列,环形队列能够重复利用,存储结构的逻辑更强,也更为严谨,环形队列的特点是,不需要进行动态的内存释放和分配,使用固定大小的内存空间反复使用。
在循环队列中,数组的首尾相连,形成一个逻辑上的环形结构。当队尾追上队头时,可以通过重置队头和队尾的索引来继续使用数组的前部空间,从而避免假溢出。 在Java中,可以使用`java.util.Queue`接口及其实现类(如`...
### Java代码实现的环形数组知识点解析 #### 一、环形数组概念 环形数组是一种特殊的数据结构,它在物理上表现为一个连续的数组空间,但在逻辑上被视为首尾相接的圆环形式。这种数据结构非常适合处理循环队列等...
内容包括: 稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、...
循环队列是一种特殊的队列结构,它的特点是队列的头尾相接,形成一个环形结构。这使得循环队列能够充分利用数组的存储空间,避免队列溢出和假溢出问题。 知识点2:循环队列的实现方法 循环队列的实现方法有两种,...
Java的`java.util.PriorityQueue`实现了堆数据结构,常用于优先级队列。 6. **散列(哈希)表**:散列表通过哈希函数将键映射到数组的索引,提供快速的查找、添加和删除操作。Java的`java.util.HashMap`和`java....
Custom-message-queue-ajax-httpClient 消息队列,使用环形队列,异步发送httpClient,在并发量不是很大的情况下可以不使用服务器去部署消息队列例如Rabbit MQ
- **环形队列**:在数组基础上实现,一端入队,另一端出队,当队列满且出队位置追上入队位置时形成环状,提高了空间利用率。 - **单链表**:每个节点包含数据和指向下一个节点的引用,用于动态存储线性数据。 - *...