您的位置:首页 > 理论基础 > 数据结构算法

Java集合中的数据结构单向队列

2020-06-29 04:53 801 查看

队列是一种数据结构,这种数据结构实现数据的先进先出;队列是一种特殊的线性表,一种运算受限的线性表;只允许在表的一端进行插入数据,在表的另一端进行删除数据;
队尾(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是遵循队列结构的,只允许在队尾进行数据的插入和在队头进行数据删除的单向队列操作

今天的分享就到这里,如果有错误的地方,欢迎大家来指点!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: