`
luochaobin
  • 浏览: 12847 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

Java 环形队列

    博客分类:
  • Java
阅读更多
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);
                }
 
            }
        }, 10001000);
    }
}

 

分享到:
评论

相关推荐

    Part03Queue_java_环形队列_bearqu5_

    本部分将深入探讨Java中如何实现环形队列,以及其在实际应用中的价值。 环形队列是线性数据结构的一种变体,它的结构类似于一个圆环,一端插入元素,另一端删除元素。相比于普通数组队列,环形队列具有更好的空间...

    数组队列学习代码:队列和环形队列

    环形队列 1)front变量的含义做一个调整:front就指向队列的第一个元素,也就是说arffront]就是 队列的第一个元素front的初始值=0 2)rear变量的含义做一个调整:rear指向队列的最后一个元素的后一个位置.因为希望...

    java版实现环形队列

    在Java中实现环形队列,通常会使用数组或链表作为底层数据容器。本教程将深入讲解如何在Java中创建和操作环形队列,以及它在数据结构和算法中的应用。 首先,理解环形队列的基本概念至关重要。队列是一种先进先出...

    1分钟实现“延迟消息”功能

    1. **环形队列**:创建一个包含3600个槽位(slot)的环形队列,每个槽位对应一秒。环形队列本质上是一个循环数组。 2. **任务集合**:每个槽位存储一个`Set&lt;Task&gt;`,其中`Task`包含了待执行的任务信息。 3. **周期...

    CircleQueue.java

    自己写的一个环形队列,用来处理数据,方便使用。项目中用到,方便用的到的人使用

    Java 队列实现原理及简单实现代码

    在循环队列中,当队尾指针达到数组末尾时,会重新回到数组的起始位置,从而形成一个逻辑上的环形结构。 循环队列的回绕过程: 1. 当队列已满,队尾指针指向数组末尾。 2. 移除队首元素后,队头指针向后移动,但队尾...

    环形缓存存储器功能测试

    环形缓存存储器,又称为循环缓冲区或环形队列,是一种高效的数据存储结构,广泛应用于多进程通信、数据采集系统、网络协议栈等多个领域。它的主要特点是利用有限的固定大小内存空间,通过“首地址”和“尾地址”的...

    java数组-基于java实现的环形缓冲数组.zip

    环形缓冲数组的设计灵感来自于环形队列,它提供了一种在有限空间内循环存放元素的方式,具有先进先出(FIFO)的特性。 环形缓冲数组的基本概念是数组的首尾相连,形成一个闭合的环。当数组填满时,新的元素会覆盖旧...

    java实现队列(数组结构)(csdn)————程序.pdf

    循环队列是一种特殊的线性数据结构,它通过在数组末尾与开头相连形成一个逻辑上的环形空间,解决了普通数组作为队列时可能出现的溢出问题。下面将详细解释其中涉及的知识点: 1. **循环队列的基本概念**: 循环...

    栈与队列ppt及代码

    "Stack_Queue"可能是包含Java代码的文件,可能包括了栈和队列的基本操作的示例代码,比如使用数组或链表实现,以及针对Google面试中可能出现的题目,如最小栈、环形队列等的解决方案。这些代码实例可以帮助学习者...

    可扩充循环队列

    在编程实现上,可扩充循环队列可以使用各种编程语言来构建,如C、C++、Java、Python等。关键在于理解和实现队列的扩展机制,以及正确处理边界条件和队列扩展时的数据迁移。在设计时,还需要考虑内存管理和并发安全...

    CircleQueueDemo.java

    本次实现了数据结构的环形队列,较之队列,环形队列能够重复利用,存储结构的逻辑更强,也更为严谨,环形队列的特点是,不需要进行动态的内存释放和分配,使用固定大小的内存空间反复使用。

    数据结构Java队列PPT学习教案.pptx

    在循环队列中,数组的首尾相连,形成一个逻辑上的环形结构。当队尾追上队头时,可以通过重置队头和队尾的索引来继续使用数组的前部空间,从而避免假溢出。 在Java中,可以使用`java.util.Queue`接口及其实现类(如`...

    Java代码实现的环形数组

    ### Java代码实现的环形数组知识点解析 #### 一、环形数组概念 环形数组是一种特殊的数据结构,它在物理上表现为一个连续的数组空间,但在逻辑上被视为首尾相接的圆环形式。这种数据结构非常适合处理循环队列等...

    【超全!】图解Java数据结构和算法(共195集)【资料+视频+课件+代码+笔记】

    内容包括: 稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、...

    基于Java数组实现循环队列的两种方法小结

    循环队列是一种特殊的队列结构,它的特点是队列的头尾相接,形成一个环形结构。这使得循环队列能够充分利用数组的存储空间,避免队列溢出和假溢出问题。 知识点2:循环队列的实现方法 循环队列的实现方法有两种,...

    数据结构与算法(JAVA语言版)

    Java的`java.util.PriorityQueue`实现了堆数据结构,常用于优先级队列。 6. **散列(哈希)表**:散列表通过哈希函数将键映射到数组的索引,提供快速的查找、添加和删除操作。Java的`java.util.HashMap`和`java....

    Custom-message-queue-ajax-httpClient:消息队列,使用环形队列,异步发送httpClient,在并发量不是很大的情况下可以不使用服务器去部署消息队列例如Rabbit MQ

    Custom-message-queue-ajax-httpClient 消息队列,使用环形队列,异步发送httpClient,在并发量不是很大的情况下可以不使用服务器去部署消息队列例如Rabbit MQ

    java数据结构与算法.pdf

    - **环形队列**:在数组基础上实现,一端入队,另一端出队,当队列满且出队位置追上入队位置时形成环状,提高了空间利用率。 - **单链表**:每个节点包含数据和指向下一个节点的引用,用于动态存储线性数据。 - *...

Global site tag (gtag.js) - Google Analytics