队列数组实现:队列长度有限,但是考虑到平时一般都使用有界队列,这应该也不算是个缺点

public class Queue {
private Object[] objs;
private int head;
private int end;
private int size; public Queue(int size){
objs = new Object[size];
this.head = 0;
this.end = -1;
this.size = 0;
} public void push(Object obj) throws Exception{
if(this.size > objs.length)
throw new Exception("Queue is full!");
if(end == objs.length - 1)
end = -1;
objs[++end] = obj;
size++;
} public Object pop() throws Exception{
if(this.size == 0)
throw new Exception("Queue is empty!");
Object tmp = objs[head++];
if(head == objs.length)
head = 0;
size--;
return tmp;
} public Object peek() throws Exception{
if(this.size == 0)
throw new Exception("Queue is empty!");
return objs[head];
} public int size(){
return this.size;
} public boolean isEmpty(){
return (size == 0);
} public boolean isFull(){
return (size == objs.length);
}
}

插入和删除的时间复杂度都为O(1)

队列双端链表实现

public class FirstLastList {
private class Data{
private Object obj;
private Data next = null; Data(Object obj){
this.obj = obj;
}
} private Data first = null;
private Data last = null; public void insertFirst(Object obj){
Data data = new Data(obj);
if(first == null)
last = data;
data.next = first;
first = data;
} public Object deleteFirst() throws Exception{
if(first == null)
throw new Exception("empty");
Data temp = first;
if(first.next == null)
last = null;
first = first.next;
return temp.obj;
} public void display(){
if(first == null)
System.out.println("empty");
System.out.print("first -> last : | ");
Data cur = first;
while(cur != null){
System.out.print(cur.obj.toString() + " | ");
cur = cur.next;
}
System.out.print("\n");
}
}
public class FirstLastListQueue {
private FirstLastList fll = new FirstLastList(); public void push(Object obj){
fll.insertLast(obj);
} public Object pop() throws Exception{
return fll.deleteFirst();
} public void display(){
fll.display();
} public static void main(String[] args) throws Exception{
FirstLastListQueue fllq = new FirstLastListQueue();
fllq.push(1);
fllq.push(2);
fllq.push(3);
fllq.display();
System.out.println(fllq.pop());
fllq.display();
fllq.push(4);
fllq.display();
}
}
first -> last : | 1 | 2 | 3 |
1
first -> last : | 2 | 3 |
first -> last : | 2 | 3 | 4 |

长度不受限制并且插入和删除的时间复杂度都为O(1)

Java队列实现的更多相关文章

  1. java队列Queue及阻塞队列

    java队列 接口Queue类在java.util包,定义了以下6个方法 详细查看官方文档https://docs.oracle.com/javase/7/docs/api/java/util/Que ...

  2. JAVA队列的使用

    JAVA队列的使用 今天跟大家来看看如何在项目中使用队列.首先我们要知道使用队列的目的是什么?一般情况下,如果是一些及时消息的处理,并且处理时间很短的情况下是不需要使用队列的,直接阻塞式的方法调用就可 ...

  3. Java:Java 队列的遍历

    Java队列到底有没有可以遍历的功能呢?暂且试一下吧 参考链接:stl容器遍历测试 1.LinkedList实现简单遍历 for(Iter =LocTimesSerials.size()-1; iSe ...

  4. Java队列集合的性能测试

    同时开10个线程存入和取出100万的数据,结论如下: DoubleBufferedQueue < ConcurrentLinkedQueue < ArrayBlockingQueue &l ...

  5. java队列——queue详细分析

    Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Deque接 口.   Q ...

  6. java队列

    "队列"这个单词是英国人说的"排".在英国"排队"的意思就是站到一排当中去.计算机科学中,队列是一种数据结构,有点类似栈,只是在队列中第一个 ...

  7. Java队列学习

    队列是Java集合中的重要组成部分,具有先进先出的特性,使其具有广泛的应用场景,比如排队等.因此今天就来学习一下Java中的队列.本文的例子使用的Java8环境. 继承类图 学习队列,首先要知道它的类 ...

  8. Java队列Queue

    上个星期总结了一下synchronized相关的知识,这次将Queue相关的知识总结一下,和朋友们分享. 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列.Java提供 ...

  9. Java队列——线程池创建的例子

    线程池为线程生命周期开销问题和资源不足问题提供了解决方案.通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上.其好处是,因为在请求到达时线程已经存在,所以无意中也消除了线程创建所带来的延迟.这 ...

  10. Java队列——Disruptor 的使用

    .什么是 Disruptor  从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列.那么它的应用场景自然就是“生产者-消费者”模型的应用场合了. 可以拿 JDK 的 Bloc ...

随机推荐

  1. cocos2d-x 2.x版本中,场景切换各方法调用顺序

    假设从A场景切换到B场景,调用各场景方法的顺序为: 如果没有切换效果(transition),则先调用B的init(),再调用A的onExitTransitionStart(),接着调用A的onExi ...

  2. C# 调用Dll 传递字符串指针参(转)

    http://www.cnblogs.com/jxsoft/archive/2011/07/06/2099061.html

  3. C++ STL@ list 应用 (leetcode: Rotate Array)

    STL中的list就是一双向链表,可高效地进行插入删除元素. List 是 C++标准程式库 中的一个 类 ,可以简单视之为双向 连结串行 ,以线性列的方式管理物件集合.list 的特色是在集合的任何 ...

  4. Java File 类的使用方法详解

    Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对Java File文件操作类进行详细地分析,并将File类中的常用方法进行简单介绍,有需要的Java开发者可以看 ...

  5. ASP.NET中的注释 .

    之前只知道<!-- -->可以注释掉html页面中的某些部分,或者添加注释说明.今天又看到<%----%>也能添加注释,于是我不解了,google一下. <!--注释-- ...

  6. [Objective-c 基础 - 2.6] @property和@synthesize

    Xcode编译器的特性,自动生成getter和setter   A.@property 自动生成某个成员变量的getter和setter的声明 变量的命名要求:以下划线开头 Student.h @in ...

  7. 将NavigationBar设置透明

    将NavigationBar设置透明(仅将指定视图控制器进行透明处理),步骤如下:1.在视图控制器的头文件中实现UINavigationControllerDelegate,例如:@interface ...

  8. 转载 DevOps的基本原则与介绍

    转载原地址:  http://www.cnblogs.com/wintersun/p/3339047.html DevOps的基本原则与介绍 DevOps这个术语是developer与operatio ...

  9. oracle 修改用户下部分表现有表空间

    工作日记之<修改用户表现有表空间> //user_tables可查询出当前登录用户的所有表,以及部分表信息,可以灵活运用于其他用途 //假设现有表空间TS1.TS2,需要迁移所有表空间TS ...

  10. ASP.NET- 无刷新上传使用jQuery插件之ajaxFileUpload

    灰常好,我已经使用过里面的代码了,可以用,原文地址:http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html 一.ajaxFil ...