在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的子接口 List,本章我们来看一下 Java 集合框架中的Collection 的子接口 Queue。

在之前我们讲 List 和 Set 的时候可以通过下标的形式获取想要的元素,在 Collection 中其实还有 Queue 这个子接口,就是队列的意思。

队列可以形象的比喻为在火车站排队买票,先进先出,后进后出,接下来我们就用代码来实现一下:

 import java.util.LinkedList;
import java.util.Queue; /**
* java.util.Queue
* 队列
* 队列也可以存放一组元素,但是存取元素必须
* 遵循:先进先出原则
*/ public class Main {
public static void main(String[] args) {
/**
* LinkedList 也实现了队列接口,
* 因为它可以保存一组元素
* 并且首尾增删快,正好符合队列的特点
*/
Queue<String> queue = new LinkedList<String>();
/**
* boolean offer(E e)
* 入队操作,向队尾追加一个新元素
*/
queue.offer("one");
queue.offer("two");
queue.offer("three");
queue.offer("four");
System.out.println(queue.size()); //
System.out.println(queue); // [one, two, three, four] /**
* E peek()
* 引用队首元素,但是不做出队操作
* 返回值是该元素
*/
String peek = queue.peek();
System.out.println(peek); // one
System.out.println(queue); // [one, two, three, four] /**
* E poll()
* 出队操作,从队首获取元素,获取后该元素
* 就从队列中被删除
* 返回值是该元素
*/
String old = queue.poll();
System.out.println(old); // one
System.out.println(queue); // [two, three, four] /**
* 循环获取每个元素
* 不能通过 i++ 的形式,因为每次取出一个后 size 会有变化
*/
for (int i = queue.size(); i > 0; i--) {
System.out.println(queue.poll()); // two three four
}
// 用 while 更好点
while (queue.size() > 0) {
System.out.println(queue.poll()); // two three four
}
}
}

队列在编程中一般不会用到,除非有特殊规定需要先后顺序的时候采用,例如在玩游戏服务器爆满要排队进入游戏的时候,当然得排除会员插队现象。

下面我们再来看一下另一个概念:栈

栈:存储医嘱元素,但是存取元素必须遵循先进后出的原则,通常为了实现后退这类功能会使用栈。

在现实生活中子弹上膛打出就是一个很经典的栈。

在上图中是队列的一些方法,如果我们把右边的方法去掉不用,仅左边的方法就是一个栈,先进后出。

在栈中还有自己的方法 push 和 pop,具体操作如下:

 import java.util.Deque;
import java.util.LinkedList; public class Main {
public static void main(String[] args) {
/**
* Java.util.Deque
* 双端队列,两端都可以进出队
* 当调用从一端进出队列操作时,就形成了栈接口
* 因此,双端队列为栈提供了两个方法
* push,pop
*/
Deque<String> stack = new LinkedList<String>();
stack.push("one");
stack.push("two");
stack.push("three");
stack.push("four");
System.out.println(stack.size()); //
System.out.println(stack); // [four, three, two, one] /**
* 获取第一个元素
*/
String peek = stack.peek();
System.out.println(peek); // four
System.out.println(stack); // [four, three, two, one] /**
* 出栈操作
*/
String old = stack.pop();
System.out.println(old); // four
System.out.println(stack); // [three, two, one] /**
* 循环出栈
*/
while (stack.size() > 0) {
System.out.println(stack.pop()); // three two one
}
}
}

队列和栈的区别在于一个先进先出,一个先进后出,很多方法都是通用的,需要自己在实际开发应用中使用。

Java 从入门到进阶之路(二十六)的更多相关文章

  1. Java 从入门到进阶之路(十六)

    在之前的文章我们介绍了一下 Java 中类的多态,本章我们来看一下 Java 中类的内部类. 在 Java 中,内部类分为成员内部类和匿名内部类. 我们先来看一下成员内部类: 1.类中套类,外面的叫外 ...

  2. Java 从入门到进阶之路(十二)

    在之前的文章我们介绍了一下 Java 类的重写及与重载的区别,本章我们来看一下 Java 类的 private,static,final. 我们在之前引入 Java 类概念的时候是通过商场收银台来引入 ...

  3. Java 从入门到进阶之路(十八)

    在之前的文章我们介绍了一下 Java 中的正则表达式,本章我们来看一下 Java 中的 Object. 在日常生活中,任何事物我们都可以看做是一个对象,在编程中是同样的道理,在 Java 编程中其实更 ...

  4. Java 从入门到进阶之路(十)

    之前的文章我们介绍了一下 Java 中的引用型数组类型,接下来我们再来看一下 Java 中的继承. 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继 ...

  5. Java 从入门到进阶之路(十五)

    在之前的文章我们介绍了一下 Java 中的接口,本章我们来看一下 Java 中类的多态. 在日常生活中,很多意思并不是我们想要的意思,如下: 1.领导:“你这是什么意思?” 小明:“没什么意思,意思意 ...

  6. Java 从入门到进阶之路(十四)

    在之前的文章我们介绍了一下 Java 中的抽象类和抽象方法,本章我们来看一下 Java 中的接口. 在日常生活中,我们会接触到很多类似接口的问题,比如 USB 接口,我们在电脑上插鼠标,键盘,U盘的时 ...

  7. Java 从入门到进阶之路(十九)

    在之前的文章我们介绍了一下 Java 中的Object,本章我们来看一下 Java 中的包装类. 在 Java 中有八个基本类型:byte,short,int,long,float,double,ch ...

  8. Python 爬虫从入门到进阶之路(十六)

    之前的文章我们介绍了几种可以爬取网站信息的模块,并根据这些模块爬取了<糗事百科>的糗百内容,本章我们来看一下用于专门爬取网站信息的框架 Scrapy. Scrapy是用纯Python实现一 ...

  9. Java 从入门到进阶之路(二十)

    在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...

  10. Java 从入门到进阶之路(二十三)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的迭代器 Iterator,本章我们来看一下 Java 集合框架中的Collection 的泛型. 在讲泛型之前我们先来 ...

随机推荐

  1. Python——day2

    学完今天我保证你自己可以至少写50行代码 明天,还在等你 回顾day1 小练习1: 小练习2: 小练习3: 好了激情的的一天已经过去了正式开始,day2的讲解         Day2 目录: 格式化 ...

  2. 第五届蓝桥杯JavaA组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜年龄 题目描述 小明带两个妹妹参加元宵灯会.别人问她们多大了,她们调皮地说:"我们俩的年龄之积是年龄之和的6倍" ...

  3. java实现算年龄

    英国数学家德摩根出生于19世纪初叶(即18xx年). 他年少时便很有才华.一次有人问他的年龄,他回答说: "到了x的平方那年,我刚好是x岁". 请你计算一下,德摩根到底出生在哪一年 ...

  4. java代码(7) ---guava之Bimap

    guava之Bimap bimap的作用很清晰:它是一个——映射,可以通过key得到value,也可以通过value得到key 一.概述 1.bimap和普通HashMap区别 (1)在java集合类 ...

  5. PAT 有理数四则运算

    本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前 ...

  6. 小程序scroll-view实现回到顶部

    一.wxml页面:catchtap阻止冒泡事件. <view class="gotop" hidden='{{!cangotop}}'catchtap="goTop ...

  7. 基于华为云IOT及无线RFID技术的智慧仓储解决方案最佳实践系列一

    [摘要]仓储管理存在四大细分场景:出入库管理.盘点.分拣和货物跟踪.本系列将介绍利用华为云IOT全栈云服务,端侧采用华为收发分离式RFID解决方案,打造端到端到IOT智慧仓储解决方案的最佳实践. 仓储 ...

  8. Jenkins入门教程(一):Windos下Jenkins的安装教程

    Jenkins的安装教程 Jenkins安装前的准备 1.安装jenkins前首先确保你的电脑已经安装了JDK,由于jenkins是基于java开发的 JDK下载地址 2.下载jenkins的安装包 ...

  9. Deno 初探

    前言 Deno 已经被前端圈子提及有很长一段时间了,上个月 Deno 发布了 1.0 版本,又掀起了一小股 Deno 热.Deno 到底是什么?它可以用来做什么呢?它好用吗?带着一直以来的好奇心,趁着 ...

  10. 关于Ubuntu系统忘记密码的解决方法合集

    昨天有台机器的Ubuntu系统密码出了问题,一直提示错误.由于里面的数据比较重要,不建议重装系统,所以百度了一会,最终解决了忘记密码问题.整理了一个大合集分享出来. 第一种:参考教程如下       ...