java什么是队列 java中的“queue类”是什么,有什么作用
各位老铁们好,相信很多人对java什么是队列都不是特别的了解,因此呢,今天就来为大家分享下关于java什么是队列以及java中的“queue类”是什么,有什么作用的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
java中的“queue类”是什么,有什么作用
java中的queue类是队列数据结构管理类。在它里边的元素可以按照添加它们的相同顺序被移除。\x0d\x0a队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的头都是调用remove()或poll()所移除的元素。在 FIFO队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个Queue实现必须指定其顺序属性。\x0d\x0a \x0d\x0aoffer添加一个元素并返回true如果队列已满,则返回false\x0d\x0apoll移除并返问队列头部的元素如果队列为空,则返回null\x0d\x0apeek返回队列头部的元素如果队列为空,则返回null\x0d\x0aput添加一个元素如果队列满,则阻塞\x0d\x0atake移除并返回队列头部的元素如果队列为空,则阻塞\x0d\x0aelement返回队列头部的元素如果队列为空,则抛出一个NoSuchElementException异常\x0d\x0a\x0d\x0aadd增加一个元索如果队列已满,则抛出一个IIIegaISlabEepeplian异常\x0d\x0aremove移除并返回队列头部的元素如果队列为空,则抛出一个\x0d\x0aNoSuchElementException异常\x0d\x0a\x0d\x0a注意:poll和peek方法出错进返回null。因此,向队列中插入null值是不合法的。\x0d\x0a \x0d\x0a还有带超时的offer和poll方法重载,例如,下面的调用:\x0d\x0aboolean success= q.offer(x,100,TimeUnit.MILLISECONDS);\x0d\x0a尝试在100毫秒内向队列尾部插入一个元素。如果成功,立即返回true;否则,当到达超时进,返回false。同样地,调用:\x0d\x0aObject head= q.poll(100, TimeUnit.MILLISECONDS);\x0d\x0a如果在100毫秒内成功地移除了队列头元素,则立即返回头元素;否则在到达超时时,返回null。\x0d\x0a阻塞操作有put和take。put方法在队列满时阻塞,take方法在队列空时阻塞。\x0d\x0a \x0d\x0aQueue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue继承了Queue接口。
java用数组实现队列
1.1.队列的数据结构
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
1.2. Java实现
QueueTest
package ch04;
public class QueueTest{
public static void main(String[] args){
ArrayQueue queue= new ArrayQueue(10);
System.out.println(queue.isEmpty());
for(int i= 0; i< 10; i++){
queue.insert(i);
}
System.out.println(queue.isFull());
while(!queue.isEmpty()){
System.out.println(queue.remove());
}
}
}
class ArrayQueue{
private int[] arrInt;//内置数组
private int front;//头指针
private int rear;//尾指针
public ArrayQueue(int size){
this.arrInt= new int[size];
front= 0;
rear=-1;
}
/**
*判断队列是否为空
*
*@return
*/
public boolean isEmpty(){
return front== arrInt.length;
}
/**
*判断队列是否已满
*
*@return
*/
public boolean isFull(){
return arrInt.length- 1== rear;
}
/**
*向队列的队尾插入一个元素
*/
public void insert(int item){
if(isFull()){
throw new RuntimeException("队列已满");
}
arrInt[++rear]= item;
}
/**
*获得对头元素
*
*@return
*/
public int peekFront(){
return arrInt[front];
}
/**
*获得队尾元素
*
*@return
*/
public int peekRear(){
return arrInt[rear];
}
/**
*从队列的对头移除一个元素
*
*@return
*/
public int remove(){
if(isEmpty()){
throw new RuntimeException("队列为空");
}
return arrInt[front++];
}
}
运行结果如下:
false
true
0
1
2
3
4
5
6
7
8
9
java中的队列都有哪些,有什么区别
阻塞队列、普通队列,非阻塞队列。
阻塞队列与普通队列的而区别在于,当队列是空时,从队列中获取元素的操作会被阻塞,或则当队列是满的时,往队列中增加元素会被阻塞,试图从空的队列中取元素的线程或从满的队列中添加元素的线程同样会被阻塞。
java常用的几种数据结构,堆栈,队列,数组,链
下面给你简单介绍:堆栈,队列,数组,链表
堆栈
采用该结构的集合,对元素的存取有如下的特点:
先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。
栈的入口、出口的都是栈的顶端位置
压栈:就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。
弹栈:就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。
队列
采用该结构的集合,对元素的存取有如下的特点:
先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。例如,安检。排成一列,每个人依次检查,只有前面的人全部检查完毕后,才能排到当前的人进行检查。队列的入口、出口各占一侧。
数组
采用该结构的集合,对元素的存取有如下的特点:
查找快:通过索引,可以快速访问指定位置的元素
增删慢:
指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素根据索引,复制到新数组对应索引的位置。
链表
采用该结构的集合,对元素的存取有如下的特点:
多个节点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的右手拉住下个人的左手,依次类推,这样多个人就连在一起了。
节点:两个部分:数据域(存储的数值),指针域(存储地址)
查找慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素
增删快:
增加元素:操作如左图,只需要修改连接下个元素的地址即可。
删除元素:操作如右图,只需要修改连接下个元素的地址即可。
关于java什么是队列到此分享完毕,希望能帮助到您。