java中的queue常见类型和方法

254 阅读4分钟

queue常见类型

在Java中,Queue是一种用于存储元素的数据结构,它遵循先进先出(FIFO)的原则。Queue接口继承了java.util.Collection接口,并且定义了一些额外的方法,使得它更适合实现FIFO。

Java中的Queue有多种实现方式,下面是一些常见的Queue实现类及其特点:

  1. LinkedList

LinkedList类实现了Queue接口,可以作为一个FIFO队列使用。由于它是基于链表实现的,因此在插入和删除元素时效率很高,但是随机访问元素的效率比较低。

  1. ArrayDeque

ArrayDeque类也实现了Queue接口,它是一个基于数组实现的双端队列(Deque),因此除了作为FIFO队列使用外,还可以在两端添加或删除元素。相对于LinkedList,ArrayDeque在随机访问元素时效率更高,但是在插入和删除元素时效率稍低。

  1. PriorityQueue

PriorityQueue类也实现了Queue接口,它是一个优先队列,即队列中的元素按照一定的优先级顺序排序,元素按照自然顺序或者自定义的Comparator进行排序。PriorityQueue是一个无界队列,可以无限扩展容量,但是在插入和删除元素时效率较低。

  1. BlockingQueue

BlockingQueue是一个阻塞队列,它支持在队列为空时获取元素的操作阻塞,并且在队列满时插入元素的操作也会被阻塞。常见的BlockingQueue实现类包括:

  • ArrayBlockingQueue:基于数组实现的有界阻塞队列。
  • LinkedBlockingQueue:基于链表实现的可选有界阻塞队列。
  • PriorityBlockingQueue:基于优先级堆实现的无界阻塞队列。
  • SynchronousQueue:没有存储元素的阻塞队列,每个插入操作必须等待另一个线程的移除操作。

常用方法

下面是常见的Queue实现类及其常用方法:

  1. LinkedList

LinkedList类是一种双向链表,实现了Queue接口。下面是LinkedList类的常用方法:

  • add(E e):将元素插入队列末尾,如果插入成功,则返回true;如果插入失败,则抛出IllegalStateException异常。
  • offer(E e):将元素插入队列末尾,如果插入成功,则返回true;如果插入失败,则返回false。
  • remove():移除并返回队列头部的元素,如果队列为空,则抛出NoSuchElementException异常。
  • poll():移除并返回队列头部的元素,如果队列为空,则返回null。
  • element():返回队列头部的元素,如果队列为空,则抛出NoSuchElementException异常。
  • peek():返回队列头部的元素,如果队列为空,则返回null。
  1. ArrayDeque

ArrayDeque类是一种基于数组实现的双端队列,也实现了Queue接口。下面是ArrayDeque类的常用方法:

  • add(E e):将元素插入队列末尾,如果插入成功,则返回true;如果插入失败,则抛出IllegalStateException异常。
  • offer(E e):将元素插入队列末尾,如果插入成功,则返回true;如果插入失败,则返回false。
  • remove():移除并返回队列头部的元素,如果队列为空,则抛出NoSuchElementException异常。
  • poll():移除并返回队列头部的元素,如果队列为空,则返回null。
  • element():返回队列头部的元素,如果队列为空,则抛出NoSuchElementException异常。
  • peek():返回队列头部的元素,如果队列为空,则返回null。
  • addFirst(E e):将元素插入队列头部,如果插入成功,则返回true;如果插入失败,则抛出IllegalStateException异常。
  • addLast(E e):将元素插入队列尾部,如果插入成功,则返回true;如果插入失败,则抛出IllegalStateException异常。
  • removeFirst():移除并返回队列头部的元素,如果队列为空,则抛出NoSuchElementException异常。
  • removeLast():移除并返回队列尾部的元素,如果队列为空,则抛出NoSuchElementException异常。
  • getFirst():返回队列头部的元素,如果队列为空,则抛出NoSuchElementException异常。
  • getLast():返回队列尾部的元素,如果队列为空,则抛出NoSuchElementException异常。
  1. PriorityQueue

PriorityQueue类是一种优先队列,实现了Queue接口。下面是PriorityQueue类的常用方法:

  • add(E e):将元素插入优先队列,如果插入成功,则返回true;如果插入失败,则抛出IllegalStateException异常。
  • offer(E e):将元素插入优先队列,如果插入成功,则返回true;如果插入失败,则返回false。
  • remove():移除并返回队列头部的元素,如果队列为空,则抛出NoSuchElementException