博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Algs4-1.3.39环形缓冲区
阅读量:6922 次
发布时间:2019-06-27

本文共 1265 字,大约阅读时间需要 4 分钟。

1.3.39环形缓冲区。环形缓冲区,又称环形队列,是一种定长为N的先进先出的数据结构。它在进程间的异步数据传输或记录日志文件时十分有用。当缓冲区为空时,消费者会在数据存入缓冲区前等待;当缓冲区满时,生产者会等待将数据存入缓冲区。为RingBuffer设计一份API并用(回环)数组将其实现。

答:
import java.util.Iterator;
public class RingBuffer<Item> implements Iterable<Item>
{
   private Item[] a;
   private int N;
   private int left;
   private int right;
 
    public RingBuffer(int arraryLength)
    {
        a=(Item[]) new Object[arraryLength];
        left=0;
        right=0;
        N=0;
    }
  
    public boolean isEmpty()
    {return N==0;}
   
    public boolean isFull()
    {return N==a.length;}
  
    public int size()
    {return N;}
  
  
    public void enqueue(Item item)
    {
       if(isFull()) return;
        right++;
        if(right==a.length) right=0;
        a[right]=item;
        if(isEmpty()) left=right;
        N++;
    }
  
    public Item dequeue()
    {
        Item item;
       if(isEmpty())
       {
           item=null;
       }
       else if(size()==1)
       {
           item=a[left];
           N--;
       }
       else
       {
           item=a[left];
           left++;
           if(left==a.length) left=0;
           N--;
       }
        return item;
    }
      
    public Iterator<Item> iterator()  {return new ListIterator();}
  
    private class ListIterator implements Iterator<Item>
    {
        private int current=left;
        public boolean hasNext(){return current!=right+1;}
        public void remove(){}
        public Item next()
        {
            Item item=a[current];
            current++;
            if(current==a.length) current=0;
            return item;
        }//end next
      }//end class ListIterator
}//end class

转载于:https://www.cnblogs.com/longjin2018/p/9854323.html

你可能感兴趣的文章
ASIHTTPRequest
查看>>
JMTabView
查看>>
IBAForms
查看>>
spring boot2 配置 FastJsonHttpMessageConverter 不起作用
查看>>
如何减少接口响应时间
查看>>
开源 免费 java CMS - FreeCMS-数据对象-channel
查看>>
蓝牙核心技术概述(一):蓝牙概述
查看>>
C++ 成员函数前和函数后加const修饰符区别
查看>>
centos7使用docker搭建fdfs
查看>>
android 6.0上getResources.getColor遭弃用
查看>>
Movie Store OpenCart 自适应主题模板 ABC-0249
查看>>
Java反射在JVM的实现
查看>>
七牛云存储 迁移资源用代码示例 [Java]
查看>>
MMVM模式
查看>>
java验证身份证号码及编码规则和提取相应信息
查看>>
python的一些使用技巧
查看>>
Windows下Nginx+PHP5的安装与配置方法
查看>>
php-----utf8和gbk相互转换
查看>>
CentOS 7 erlang.mk:30: Please upgrade to GNU Make 4
查看>>
基于centos6.7离线安装docker1.7.1
查看>>