前言

java已经提供了堆和栈的相对应的类,这里只是模拟一下队列。

队列是一种先进先出的线性表。

基础

java5中新增加了java.util.Queue接口,用以支持队列的常见操作

LinkedList类实现了Queue接口

使用offer()来加入元素,使用poll()来获取并移出元素

实现:

public class ceshi {

    public static void main(String[] args) {
//add()和remove()方法在失败的时候会抛出异常(不推荐)
Queue<String> queue = new LinkedList<String>();
//添加元素
queue.offer("a");
queue.offer("b");
queue.offer("c");
queue.offer("d");
queue.offer("e");
for (String q : queue) {
System.out.println(q);
}
System.out.println("===");
System.out.println("poll=" + queue.poll()); //返回第一个元素,并在队列中删除
for (String q : queue) {
System.out.println(q);
}
System.out.println("===");
System.out.println("element=" + queue.element()); //返回第一个元素
for (String q : queue) {
System.out.println(q);
}
System.out.println("===");
System.out.println("peek=" + queue.peek()); //返回第一个元素
for (String q : queue) {
System.out.println(q);
}
}
}

两个队列模拟一个堆栈

/**
* 两个队列模拟一个堆栈
* 队列:先进先出
* 堆栈:先进后出
* 解决方法:两个队列始终有一个为空,另一个有全部数据,每次取数据,就取完存入另一个队列。
*/
interface IStack<T> { void push(T newElement); T pop(); T top(); int size();
} class StackImpl<T> implements IStack<T> { private Queue<T> queue1 ;
private Queue<T> queue2;
private T topRecord;
private int size; public StackImpl() {
this.queue1 = new LinkedList<>();
this.queue2 = new LinkedList<>();
this.size = 1;
} @Override
public void push(T newElement) {
if (queue2.size() == 0) {
queue1.offer(newElement);
} else if (queue1.size() == 0) {
queue2.offer(newElement);
}
topRecord = newElement;
size++;
} @Override
public T pop() {
T result = null;
if (size <= 0) {
return null;
}
if (queue2.size() == 0) {
if (queue1.size() == 1) {
topRecord = null;
result= queue1.poll();
}
while (queue1.size() > 1) {
result = queue1.poll();
if (queue1.size() == 2) {
topRecord = result;
}
queue2.offer(result);
}
result = queue1.poll();
} else if (queue1.size() == 0) {
if (queue2.size() == 1) {
topRecord = null;
result= queue2.poll();
}
while (queue2.size() > 1) {
result = queue2.poll();
if (queue2.size() == 2) {
topRecord = result;
}
queue1.offer(result);
}
result = queue2.poll();
}
size--;
return result;
} @Override
public T top() {
return topRecord;
} @Override
public int size() {
return this.size;
}
}

java基础——队列的更多相关文章

  1. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  2. Java基础应用

    Java集合类解析 List.Map.Set三个接口,存取元素时,各有什么特点? List 以特定次序来持有元素,可有重复元素.Set 无法拥有重复元素,内部排序.Map 保存key-value值,v ...

  3. Java基础进阶整理

    Java学习笔记整理 本文档是我个人整理的,首先是想通过完成本文档更加扎实自己的基础加强对java语言的理解,然后就是想给入了门的同志们做下贡献. 当然,本文档主要是对java语言基础(当然还有很多基 ...

  4. Java基础常见英语词汇

    Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的                             ['prəʊɡræmɪŋ]编程 OO: object ...

  5. java基础之:堆排序

    最近做题目饱受打击,愈发觉得打好基础的重要性,于是乎,决心把基本的排序算法还有数组操作一一实现,目的在于一方面能够得到对JAVA基础的巩固,另一面在实现的过程中发现不足. 今天所实现的堆排序(最大堆) ...

  6. java基础-java核心知识库

    本人从事java开发6年左右,主要从事互联网相关的开发,目前还是奋战在一线的码农,痛并快乐着.受互联网产品热潮的影响,关注高性能低成本架构,互联网开发框架,以下是我认为作为一个资深java程序员应该掌 ...

  7. 【概念笔记】JAVA基础 - part1

    IT`huhui前言录 这是自己对JAVA基础的一个小总结,会不断完善.因为时间仓促的原因. 每学习一段时间,停下来,静心总结一下,甚好.停停走,走走停,一往无前,不摔倒. 一些链接里面是我看到一些人 ...

  8. Android开发面试经——3.常见Java基础笔试题

      Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...

  9. JAVA基础英语单词表(下)

    quantity                     / 'kwɔntiti /                    量,数量 query                             ...

随机推荐

  1. 使用webpack打包js文件(隔行变色案例)

    使用webpack打包js文件(隔行变色案例) 1.webpack安装的两种方式 运行npm i webpack -g全局安装webpack,这样就能在全局使用webpack的命令 在项目根目录中运行 ...

  2. (win 7)使用puma以后,重启rails server报错: in `trap': unsupported signal SIGCHLD (ArgumentError)

    如图: 解决方案: 把config/puma.rb 文件中的 workers Integer(ENV['WEB_CONCURRENCY'] || 2) 改成 workers Integer(ENV[' ...

  3. 在CentOS上装Redis

    Redis官网 $ wget http://download.redis.io/releases/redis-3.2.5.tar.gz $ tar xzf redis-.tar.gz $ cd red ...

  4. 代码查看php是否已开启rewrite功能模块

    通过php代码来查询,是否把rewrite模块打开了 <?php $result = apache_get_modules(); if(in_array('mod_rewrite', $resu ...

  5. android studio启动和项目编译问题

    第一次安装完成后,不要立刻启动,首先在Android Studio安装目录下的 bin 目录下,找到 idea.properties 文件,在文件最后追加disable.android.first.r ...

  6. ASP.NET 多环境下配置文件web.config的灵活配置---转

    注意:本功能在.Net Core中已经不可用,暂时需手动修改web.config中的信息,或者将其设置在appsettings.XXX.json中,然后再使用web.config中的环境变量来制定使用 ...

  7. gocommand:一个跨平台的golang命令行执行package

    最近在做一个项目的时候,需要使用golang来调用操作系统中的命令行,来执行shell命令或者直接调用第三方程序,这其中自然就用到了golang自带的exec.Command. 但是如果直接使用原生e ...

  8. Spring中使用两种Aware接口自定义获取bean

    在使用spring编程时,常常会遇到想根据bean的名称来获取相应的bean对象,这时候,就可以通过实现BeanFactoryAware来满足需求,代码很简单: @Servicepublic clas ...

  9. c# winform项目用到的部分知识点总结

    项目用到的知识点总结,欢迎大家吐槽: /// <summary> /// 转换非yyyy-MM-dd的字符串为DateTime类型 /// </summary> public ...

  10. springboot之定时任务@Scheduled

    1.pom.xml中导入必要的依赖: <parent> <groupId>org.springframework.boot</groupId> <artifa ...