在之前的文章我们介绍了一下 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. Java实现 LeetCode 787 K 站中转内最便宜的航班(两种DP)

    787. K 站中转内最便宜的航班 有 n 个城市通过 m 个航班连接.每个航班都从城市 u 开始,以价格 w 抵达 v. 现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是 ...

  2. Java实现 LeetCode 86 分割链表

    86. 分隔链表 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1 ...

  3. java实现最大连续和问题

    /* 10 5 -3 12 -31 15 22 -7 6 -8 -9 10 .... 暴力:O(n^3) 分治:[ mid ) 三种情况求最大 基线法: O(n) 2个数组: 从左到本位:出现的最大累 ...

  4. Java实现 蓝桥杯 历届试题 国王的烦恼

    问题描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛.两个小岛间可能存在多座桥连接.然而,由于海水冲刷,有一些大桥面临着不能使用的危险. 如果两个小岛间 ...

  5. 00-02.kaliLinux-配置SSH服务

    KaliLinux的SSH服务默认是需要手动配置好后才能使用,否则通过xShell等工具是无法连接上的. 修改SSH服务的配置文件 root@kali:~# cd /etc/ssh root@kali ...

  6. local 对象补充

    昨日回顾 1 @app.before_first_request,再项目启动后接收到的第一个请求,会执行before_first_request,他再@app.before_request之前执行.他 ...

  7. 掌握SpringBoot-2.3的容器探针:实战篇

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:原创文章分类汇总,及配套源码,涉及Java.Docker.K8S.DevOPS等 经过多篇知识 ...

  8. [C#.NET 拾遗补漏]05:操作符的几个骚操作

    阅读本文大概需要 1.5 分钟. 大家好,这是极客精神[C#.NET 拾遗补漏]专辑的第 5 篇文章,今天要讲的内容是操作符. 操作符的英文是 Operator,在数值计算中习惯性的被叫作运算符,所以 ...

  9. 探究:Adobe Premiere Pro CC 2018 导入SRT字幕显示不全问题

    问题:如果使用PR,大概率会遇到导入SRT格式的字幕文件后,PR里面显示的字幕不完整,字幕丢失的问题. 探究:字幕文件的内容正常,导入PR后字幕出现丢失. 查看字幕文件,并测试,发现如下图,如果出现字 ...

  10. @RequestMAPPPING映射请求占位符@PathVariable注解

    @PathVariable:通过@PathVariable 可以将URL 中占位符参数绑定到控制器处理方法的入参中 URL中的{xxx} 占位符可以通过 @PathVariable{"xxx ...