• Java常见队列和栈构造与常用方法


    队列

    PriorityQueue

    PriorityQueue是一个基于优先级堆(binary heap)的无界优先队列。优先队列中的元素按照优先级进行排序,优先级最高的元素排在队列的前面。
    默认构造函数:创建一个初始容量为11的空优先队列。

    PriorityQueue<E> queue = new PriorityQueue<>();
    
    • 1

    带有初始容量的构造函数:创建一个指定初始容量的空优先队列。

    PriorityQueue<E> queue = new PriorityQueue<>(initialCapacity);
    
    • 1

    带有初始容量和比较器的构造函数:创建一个指定初始容量和比较器的空优先队列。
    比较器来控制数据的优先顺序

    PriorityQueue<E> queue = new PriorityQueue<>(initialCapacity, comparator);
    
    • 1

    例如:

    PriorityQueue<Integer> minHeap = new PriorityQueue<>(k, Comparator.comparingInt(a -> a));
    
    • 1

    常见方法:

    方法名描述
    add(E e)向队列中添加一个元素
    offer(E e)向队列中添加一个元素
    poll()获取并移除队列中优先级最高的元素
    peek()获取但不移除队列中优先级最高的元素
    size()返回队列中的元素数量
    isEmpty()判断队列是否为空
    clear()清空队列
    remove(Object o)从队列中移除指定元素
    contains(Object o)判断队列中是否包含指定元素

    ArrayDeque

    ArrayDeque是Java中的一个双端队列(deque),底层使用数组实现。它可以在两端进行高效地插入和删除操作,并且没有容量限制。

    构造一个ArrayDeque对象可以使用以下方式:

    1. 默认构造函数:创建一个初始容量为16的空双端队列。

      ArrayDeque<E> deque = new ArrayDeque<>();
      
      • 1
    2. 带有初始容量的构造函数:创建一个指定初始容量的空双端队列。

      ArrayDeque<E> deque = new ArrayDeque<>(initialCapacity);
      
      • 1

    常见的ArrayDeque方法包括:

    方法名描述
    addFirst(E e)在队列头部添加一个元素
    addLast(E e)在队列尾部添加一个元素
    offerFirst(E e)在队列头部添加一个元素
    offerLast(E e)在队列尾部添加一个元素
    pollFirst()获取并移除队列头部的元素
    pollLast()获取并移除队列尾部的元素
    peekFirst()获取但不移除队列头部的元素
    peekLast()获取但不移除队列尾部的元素
    size()返回队列中的元素数量
    isEmpty()判断队列是否为空
    clear()清空队列
    removeFirst()移除并返回队列头部的元素
    removeLast()移除并返回队列尾部的元素
    contains(Object o)判断队列中是否包含指定元素

    除了上述方法,ArrayDeque还有其他一些方法,可以根据具体需求进行使用。

    以下是整理成的表格:

    方法名描述
    addFirst(E e)在队列头部添加一个元素
    addLast(E e)在队列尾部添加一个元素
    offerFirst(E e)在队列头部添加一个元素
    offerLast(E e)在队列尾部添加一个元素
    pollFirst()获取并移除队列头部的元素
    pollLast()获取并移除队列尾部的元素
    peekFirst()获取但不移除队列头部的元素
    peekLast()获取但不移除队列尾部的元素
    size()返回队列中的元素数量
    isEmpty()判断队列是否为空
    clear()清空队列
    removeFirst()移除并返回队列头部的元素
    removeLast()移除并返回队列尾部的元素
    contains(Object o)判断队列中是否包含指定元素

    BlockingQueue

    BlockingQueue是Java中的一个阻塞队列,它继承了Queue接口,并提供了一些阻塞操作的方法。阻塞队列在没有空间时会阻塞插入操作,当队列为空时会阻塞获取操作,从而实现线程安全的队列操作。

    构造一个BlockingQueue对象可以使用以下方式:

    1. ArrayBlockingQueue构造函数:创建一个基于数组的有界阻塞队列。

      BlockingQueue<E> queue = new ArrayBlockingQueue<>(capacity);
      
      • 1
    2. LinkedBlockingQueue构造函数:创建一个基于链表的可选界限阻塞队列。

      BlockingQueue<E> queue = new LinkedBlockingQueue<>();
      
      • 1
    3. PriorityBlockingQueue构造函数:创建一个基于优先级的无界阻塞队列。

      BlockingQueue<E> queue = new PriorityBlockingQueue<>();
      
      • 1
    4. SynchronousQueue构造函数:创建一个没有缓冲区的阻塞队列。

      BlockingQueue<E> queue = new SynchronousQueue<>();
      
      • 1

    常见的BlockingQueue方法包括:

    方法名描述
    put(E e)将一个元素插入队列中,若队列已满则阻塞等待
    offer(E e, long timeout, TimeUnit unit)将一个元素插入队列中,在指定时间内等待空闲容量
    take()获取并移除队列头部的元素,若队列为空则阻塞等待
    poll(long timeout, TimeUnit unit)获取并移除队列头部的元素,在指定时间内等待队列非空
    peek()获取但不移除队列头部的元素
    size()返回队列中的元素数量
    isEmpty()判断队列是否为空
    clear()清空队列
    remove(Object o)从队列中移除指定元素
    contains(Object o)判断队列中是否包含指定元素

    除了上述方法,BlockingQueue还有其他一些方法,可以根据具体需求进行使用。

    以下是整理成的表格:

    方法名描述
    put(E e)将一个元素插入队列中,若队列已满则阻塞等待
    offer(E e, long timeout, TimeUnit unit)将一个元素插入队列中,在指定时间内等待空闲容量
    take()获取并移除队列头部的元素,若队列为空则阻塞等待
    poll(long timeout, TimeUnit unit)获取并移除队列头部的元素,在指定时间内等待队列非空
    peek()获取但不移除队列头部的元素
    size()返回队列中的元素数量
    isEmpty()判断队列是否为空
    clear()清空队列
    remove(Object o)从队列中移除指定元素
    contains(Object o)判断队列中是否包含指定元素

    ArrayDeque

    ArrayDeque是Java中的双端队列,它可以在两端高效地插入和删除元素,因而具有比Stack和LinkedList更好的性能。

    构造一个ArrayDeque对象可以使用以下方式:

    1. 无参构造函数:创建一个空的ArrayDeque。

      ArrayDeque<E> deque = new ArrayDeque<>();
      
      • 1
    2. 带初始容量的构造函数:创建指定容量的ArrayDeque。

      ArrayDeque<E> deque = new ArrayDeque<>(initialCapacity);
      
      • 1

    常见的ArrayDeque方法包括:

    方法名描述
    addFirst(E e)在队头插入元素,如果队列已满则抛出异常
    addLast(E e)在队尾插入元素,如果队列已满则抛出异常
    offerFirst(E e)在队头插入元素,如果队列已满则返回false
    offerLast(E e)在队尾插入元素,如果队列已满则返回false
    removeFirst()获取并移除队头元素,如果队列为空则抛出异常
    removeLast()获取并移除队尾元素,如果队列为空则抛出异常
    pollFirst()获取并移除队头元素,如果队列为空则返回null
    pollLast()获取并移除队尾元素,如果队列为空则返回null
    getFirst()获取队头元素,如果队列为空则抛出异常
    getLast()获取队尾元素,如果队列为空则抛出异常
    peekFirst()获取队头元素,如果队列为空则返回null
    peekLast()获取队尾元素,如果队列为空则返回null
    size()返回队列中的元素数量
    isEmpty()判断队列是否为空
    clear()清空队列
    contains(Object o)判断队列中是否包含指定元素

    除了上述方法,ArrayDeque还有其他一些方法,可以根据具体需求进行使用。

    以下是整理成的表格:

    方法名描述
    addFirst(E e)在队头插入元素,如果队列已满则抛出异常
    addLast(E e)在队尾插入元素,如果队列已满则抛出异常
    offerFirst(E e)在队头插入元素,如果队列已满则返回false
    offerLast(E e)在队尾插入元素,如果队列已满则返回false
    removeFirst()获取并移除队头元素,如果队列为空则抛出异常
    removeLast()获取并移除队尾元素,如果队列为空则抛出异常
    pollFirst()获取并移除队头元素,如果队列为空则返回null
    pollLast()获取并移除队尾元素,如果队列为空则返回null
    getFirst()获取队头元素,如果队列为空则抛出异常
    getLast()获取队尾元素,如果队列为空则抛出异常
    peekFirst()获取队头元素,如果队列为空则返回null
    peekLast()获取队尾元素,如果队列为空则返回null
    size()返回队列中的元素数量
    isEmpty()判断队列是否为空
    clear()清空队列
    contains(Object o)判断队列中是否包含指定元素

    LinkedList

    LinkedList是Java中的链表,它可以用于实现队列、栈等数据结构。构造一个LinkedList对象可以使用以下方式:

    1. 无参构造函数:创建一个空的LinkedList。

      LinkedList<E> linkedList = new LinkedList<>();
      
      • 1
    2. 使用Collection类型参数的构造函数:创建一个包含指定集合的LinkedList。

      LinkedList<E> linkedList = new LinkedList<>(collection);
      
      • 1

    常见的LinkedList方法包括:

    方法名描述
    add(E e)在链表末尾添加元素
    addFirst(E e)在链表头部添加元素
    addLast(E e)在链表末尾添加元素
    offer(E e)在链表末尾添加元素,如果插入成功则返回true
    offerFirst(E e)在链表头部添加元素,如果插入成功则返回true
    offerLast(E e)在链表末尾添加元素,如果插入成功则返回true
    remove()移除并返回链表的头部元素
    removeFirst()移除并返回链表的头部元素
    removeLast()移除并返回链表的尾部元素
    poll()移除并返回链表的头部元素,如果链表为空则返回null
    pollFirst()移除并返回链表的头部元素,如果链表为空则返回null
    pollLast()移除并返回链表的尾部元素,如果链表为空则返回null
    getFirst()返回链表的头部元素,如果链表为空则抛出异常
    getLast()返回链表的尾部元素,如果链表为空则抛出异常
    peek()返回链表的头部元素,如果链表为空则返回null
    peekFirst()返回链表的头部元素,如果链表为空则返回null
    peekLast()返回链表的尾部元素,如果链表为空则返回null
    size()返回链表中的元素数量
    isEmpty()判断链表是否为空
    clear()清空链表
    contains(Object o)判断链表中是否包含指定元素
  • 相关阅读:
    【Lilishop商城】No2-1.确定项目结构和数据结构(用户、商品、订单、促销等模块)
    什么是中间人攻击
    拥塞控制(计算机网络)
    Spark中对大表子查询加limit为什么会报Broadcast超时错误
    msvcp140.dll是什么东西,如何解决msvcp140.dll丢失的问题的方法分享
    计算点在线上的投影坐标
    ShardingSphere生产实战
    递归、搜索与回溯算法:综合练习
    【Flutte】【widget】drawer 抽屉快速实现
    LINUX安装nginx
  • 原文地址:https://blog.csdn.net/m0_51663233/article/details/133856461