Queue
Queue是Java集合框架中的一员,继承于Collection接口。
与List、Set相同的是,Queue也实现了一种数据结构,这就是队列。
队列是计算机中的一种数据结构,保存在其中的数据具有“先进先出(FIFO,First In First Out)”的特性。
在数据结构中,队列不支持从队伍的中间插入和离开,只能从头尾进行。
队列的两种形式
在Java中,队列分为2种形式,一种是单队列,一种是循环队列;
通常,都是使用数组来实现队列。假定数组的长度为6,也就是队列的长度为6;
-
单队列:
第一步,创建一个空数组,有两个变量,分别为front、rear,代表着头指针、尾指针;
第二步,向队列中插入数据;
第三步,移除队头中的数据;
第四步,再次向队列中插数据(此时rear指针指向了一个不存在的角标);
此时,单队列发生了“假溢出”情况,尾指针指向了一个不存在的数组角标。
如果,要解决该情况的发生,有两种方式-----一,无限扩充数组大小;二,引入循环队列; -
循环队列:
当尾指针超过了数组角标大小,此时我们会判断队列的头部是否有剩余的空间,如果有就把尾指针指向队列的头部;
此时,循环队列就产生了。
其实,循环队列就是将单队列的首位进行相连,形成了一个圆圈,这样就不会发生角标越界的情况了。
在Java中,ArrayDeque、LinkedList、PriorityQueue等类实现了Queue接口,模拟了队列的数据结构。