本文目录一览:
java中的队列都有哪些
常见的有: 有界队列:
- ArrayBlockingQueue
- LinkedBlockingQueue
- PriorityBlockingQueue(具有优先级的队列) 无界队列:
- SynchronousQueue
java中queue的使用方法?
Java中的Queue类是队列数据结构管理类。在它里面的元素可以按照添加它们的相同顺序被移除。
队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的头都是调用 remove()
或 poll()
所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个 Queue
实现必须指定其顺序属性。
常用方法:
offer
:添加一个元素并返回true
;如果队列已满,则返回false
poll
:移除并返回队列头部的元素;如果队列为空,则返回null
peek
:返回队列头部的元素;如果队列为空,则返回null
put
:添加一个元素;如果队列满,则阻塞take
:移除并返回队列头部的元素;如果队列为空,则阻塞element
:返回队列头部的元素;如果队列为空,则抛出一个NoSuchElementException
异常add
:增加一个元素;如果队列已满,则抛出一个IllegalStateException
异常remove
:移除并返回队列头部的元素;如果队列为空,则抛出一个NoSuchElementException
异常 注意:poll
和peek
方法出错时返回null
。因此,向队列中插入null
值是不合法的。 还有带超时的offer
和poll
方法重载,例如:
boolean success = q.offer(x, 100, TimeUnit.MILLISECONDS);
尝试在 100 毫秒内向队列尾部插入一个元素。如果成功,立即返回 true
;否则,当到达超时时,返回 false
。同样地,调用:
Object head = q.poll(100, TimeUnit.MILLISECONDS);
如果在 100 毫秒内成功地移除了队列头元素,则立即返回头元素;否则在到达超时时,返回 null
。
阻塞操作有 put
和 take
。put
方法在队列满时阻塞,take
方法在队列空时阻塞。
Queue
接口与 List
、Set
同一级别,都是继承了 Collection
接口。LinkedList
实现了 Queue
接口。Queue
接口窄化了对 LinkedList
的方法的访问权限(即在方法中的参数类型如果是 Queue
时,就完全只能访问 Queue
接口所定义的方法了,而不能直接访问 LinkedList
的非 Queue
的方法),以使得只有恰当的方法才可以使用。BlockingQueue
继承了 Queue
接口。
在java中,什么是队列?
Java 中没有队列这个东西吧...队列这个是出现在数据结构里面的吧。 队列的结构是先进先出。有队头和队尾,数据从尾进,从头读出来。 例如:1 2 3 4 5 这么一个队列,Java 读这个数据是从队头 1 开始读,读到 1 后把它拿出来,队列剩下 2 3 4 5。如果要添加进去,则是在队尾 5 的后面加一个,如 3,那么队列变成 2 3 4 5 3。 这与栈不同,栈是先进后出。你可以自己翻书或者网上搜索“数据结构 栈”。 补充一下,Java 是有提供队列的类的,建议自己查阅 API 文档。
JAVA中队列和栈的区别
队列 (Queue):是限定只能在表的一端进行插入和在另一端进行删除操作的线性表;
栈 (Stack):是限定只能在表的一端进行插入和删除操作的线性表。
区别如下:
一、规则不同
- 队列:先进先出 (First In First Out, FIFO)
- 栈:先进后出 (First In Last Out, FILO)
二、对插入和删除操作的限定不同
- 队列:只能在表的一端进行插入,并在表的另一端进行删除;
- 栈:只能在表的一端插入和删除。
三、遍历数据速度不同
- 队列:基于地址指针进行遍历,而且可以从头部或者尾部进行遍历,但不能同时遍历,无需开辟空间,因为在遍历的过程中不影响数据结构,所以遍历速度要快;
- 栈:只能从顶部取数据,也就是说最先进入栈底的,需要遍历整个栈才能取出来,而且在遍历数据的同时需要为数据开辟临时空间,保持数据在遍历前的一致性。
java中的队列都有哪些,有什么区别?
Java 中的队列主要分为以下几种:
- 阻塞队列
- 普通队列
- 非阻塞队列
区别:
阻塞队列 与 普通队列 的区别在于:
- 当队列是空时,从队列中获取元素的操作会被阻塞;
- 当队列是满时,往队列中添加元素的操作会被阻塞;
- 试图从空的队列中取元素的线程或从满的队列中添加元素的线程同样会被阻塞。
队列的基本操作:
队列的两个基本操作是:
- inserting(插入) 一个数据项,即把一个数据项放入队尾;
- removing(移除) 一个数据项,即移除队头的数据项。
这类似于电影爱好者排队买票时先排到队尾,然后到达队头买票后离开队列。
栈中的插入和移除数据项方法的命名是很标准,称为
push
和pop
。队列的方法至今没有标准化的命名。“插入”可以称为put
、add
或enqueue
,而“删除”可以叫delete
、get
或dequeue
。插入数据项的队尾,也可以叫作back
、tail
或end
。而移除数据项的队头,也可以叫head
。下面将使用insert
、remove
、front
和rear
。 插入将值插入队尾,同时队尾箭头增加一,指向新的数据项。