Java集合中的数据结构单向队列
队列是一种数据结构,这种数据结构实现数据的先进先出;队列是一种特殊的线性表,一种运算受限的线性表;只允许在表的一端进行插入数据,在表的另一端进行删除数据;
队尾(rear):是允许插入数据的一端
队头(front):是允许删除数据的一端
下图为队列中数据的增删操作
从图中可以看到,我们要向队列中插入数据,需要从队列后面依此插入数据;我们需要删除数据的时候,需要从队列前面进行依此删除数据
对于队列,在java集合框架中也存在队列Queue(单向队列),我们通过下面的Collection继承体系图来了解队列所处位置
对于java中的队列Queue来说,它是一个接口,无法直接实例化,但是在Queue的继承体系中有一个我们比较熟悉的集合类LinkedList,我们可以通过这个类来创建队列的实例对象
Queue<String> queue = new LinkedList<String>();
既然是集合那我们就可以通过泛型指定存储的数据类型
在单向队列Queue中存在以下几种增删数据的方法
1.增加数据到队列中
boolean add(E e)
boolean offer(E e)
这两种方法都为添加数据,但是对于add来说,如果我们指定容量的时候,会出现异常,所以一般建议使用offer来添加数据到队列
//获取队列实例 Queue<String> queue = new LinkedList<String>(); //向队列中添加数据 queue.offer("hello"); queue.offer("java"); queue.offer("world");
2.从队列中删除数据
E remove():删除表头的元素,并把被删除的元素返回;如果队列中没有元素,使用此方法会报NoSuchElement的异常
E poll():删除表头的元素,并把被删除的元素返回;如果队列中没有元素,返回null
//获取队列实例 Queue<String> queue = new LinkedList<String>(); //向队列中添加数据 queue.offer("hello"); queue.offer("java"); queue.offer("world");//删除表头元素 System.out.println(queue.remove());//打印结果为:hello System.out.println(queue.poll());//打印结果为:java System.out.println(queue.poll());//打印结果为:world //当为空的时候的返回内容 System.out.println(queue.poll());//打印结果为:null System.out.println(queue.remove());//直接报错NoSuchElementException
由打印结果可知,先被放进队列的元素最先被打印出来,因为最先被放入的数据会被放到表头,后面的数据依此被放入排列;当我们取出数据的时候,从表头开始,依此被取出
当队列的元素被删除完为空的时候,对于poll会直接返回null,对于remove直接报错;所以使用时根据实际情况进行选择使用
3.检查表头的元素
E element():返回表头的元素,不会删除元素,当队列为空的时候,会报出NoSuchElement异常
E peek():返回表头元素,不会删除元素,当队列为空的时候,返回null
//获取队列实例 Queue<String> queue = new LinkedList<String>(); //向队列中添加数据 queue.offer("hello"); queue.offer("java"); queue.offer("world");//检查表头的元素 System.out.println(queue.element());//打印结果为:hello System.out.println(queue.peek());//打印结果为:hello System.out.println(queue.size());//打印结果为:3
从打印结果,可以看到中两个方法返回了表头元素,并不会删除元素,队列数据的长度不变
从上述方法可以看到,java中的单向队列Queue是遵循队列结构的,只允许在队尾进行数据的插入和在队头进行数据删除的单向队列操作
今天的分享就到这里,如果有错误的地方,欢迎大家来指点!
- Java基础之集合框架--使用LinkedList模拟堆栈或队列数据结构
- java 集合-数据结构-单向链表
- java数据结构之LinkedQueue(用链表实现的双端单向队列)
- Java集合中的数据结构双向队列
- Java基础知识强化之集合框架笔记20:数据结构之 栈 和 队列
- java实现数据结构中的环形队列
- java实现队列数据结构代码详解
- java集合和数据结构深入解读
- Java的Hibernate框架中集合类数据结构的映射编写教程
- Java 集合框架(常用数据结构)
- 数据结构实战java实现队列
- Java笔记集合之栈和队列
- 数据结构Java实现——②队列--->队列的“奇葩”一循环顺序队列
- Java多线程 阻塞队列和并发集合
- 数据结构:线性表的链式存储(单向链表)--Java实现
- 《黑马程序员》java笔记->集合List中:ArrayList,LinkedList,及队列设计例子
- (7)Java数据结构--集合map,set,list详解
- Java关于数据结构及如何实现:表、栈与队列详解
- 数据结构队列的java实现,包括线性和链式两种方式
- Java练习数据结构第3章栈和队列——利用栈实现迷宫的求解