Java自带的栈和队列(使用巨方便)

目录

1.Java封装的栈

2.Java自带的队列

2.1 ArrayDeque

2.2 LinkedList

2.3 PriorityQueue


1.Java封装的栈

栈——“后进先出”原则

Stack<T> stack = new Stack();

/**栈顶添加元素*/
stack.push(T);

/**栈顶弹出元素*/
T temp = stack.pop();

/**查看当前栈顶元素,元素不出栈*/
T temp = stack.peek();

2.Java自带的队列

队列——“先进先出”原则

定义:

        是指Java集合框架中的Queue接口及其实现类。

Queue接口继承自Collection接口,表示一种先进先出(FIFO)的数据结构,常用于实现队列的功能。

Java中常用的队列实现类包括:

  1. ArrayDeque:基于数组实现的双端队列,既可以作为队列使用,也可以作为栈使用。
  2. LinkedList:基于链表实现的双向队列,也可以作为队列使用。
  3. PriorityQueue:基于堆实现的优先队列,元素按照优先级顺序排序。

Java的队列实现类

1、都实现Queue接口,使用方法一致

2、都是线程安全的,可以在多线程环境下使用。

2.1 ArrayDeque

当作栈使用

入栈(只能从栈顶进)

1、push()

出栈

(从栈顶出,注意这里First表示栈顶)

1、pop()

2、poll()

3、pollFirst()

(Last是栈底)

3、pollLast()

查看

(栈顶)

1、peek()

2、peekFirst()

 (栈底)

3、peekLast()

    ArrayDeque<Integer> arrayDeque = new ArrayDeque<>();
/**入栈*/
    arrayDeque.push(1);
    arrayDeque.push(9);
/**弹出栈顶元素*/
    System.err.println(arrayDeque.pop());//打印9
/**查看现在栈顶元素*/
    System.err.println(arrayDeque.peek());//打印1

当作队列使用方法

入队

(加入队头)

1、offer(T) 

2、offerFirst(T)

   (加入队尾)

3、offerLast(T)

出队

     (队头出)

1、pop()

2、poll()

3、pollFirst()

      (队尾出)

3、pollLast()

查看元素,不弹出

     (队头)

1、peek()

2、peekFirst()

        (队尾)

3、peekLast()

import java.util.ArrayDeque; 

    ArrayDeque<Integer> deque = new ArrayDeque<>();
    /**加入元素*/
    deque.offer(1);
    deque.offer(4);
    deque.offer(3); // 队列元素为  1 4 3
    /**队头加入元素 */
    deque.offerFirst(5);// 队列元素 5 1 4 3
    /**队尾加入元素 */
    deque.offerLast(7);// 队列元素 5 1 4 3 7
    /**查看对头元素 */
    System.err.println(deque.getFirst());//5
    System.err.println(deque.peekFirst());//5
    /**查看队尾元素 */
    System.err.println(deque.getLast());//7
    /**弹出队头元素 */
    System.err.println(deque.poll());//5
    System.err.println(deque.pollFirst());//1
    /**查看当前队头元素(不弹出) */
    System.err.println(deque.peek());
    System.err.println(deque.peekFirst());
    }

2.2 LinkedList

作栈和队列使用同ArrayDeque一致

区别:存储方式不一致,LinkedList是链式存储

方法概述 其实跟ArrayDeque使用一模一样,就是初始化队列不同

    LinkedList<Integer> deque = new LinkedList<>();
    deque.offer(1);
    deque.offer(4);
    deque.offer(3); // 队列元素为  1 4 3
    /**队头加入元素 */
    deque.offerFirst(5);// 队列元素 5 1 4 3
    /**队尾加入元素 */
    deque.offerLast(7);// 队列元素 5 1 4 3 7
    /**查看对头元素 */
    System.err.println(deque.getFirst());//5
    System.err.println(deque.peekFirst());//5
    /**查看队尾元素 */
    System.err.println(deque.getLast());//7
    /**弹出队头元素 */
    System.err.println(deque.poll());//5
    System.err.println(deque.pollFirst());//4
    /**查看当前队头元素(不弹出) */
    System.err.println(deque.peek());
    System.err.println(deque.peekFirst());
    }

2.3 PriorityQueue

只能作为队列,而且相比LinkedList,PriorityQueue加入元素会自动按顺序重组

入队只有队尾加元素 offer()

出队只有对头出元素 poll()

只能查看队头元素 peek()

        PriorityQueue<Integer> queue = new PriorityQueue<>();

        // 入队
        queue.offer(3);
        queue.offer(1);
        queue.offer(2);

        // 出队
        System.out.println(queue.poll()); // 输出:1

        // 查看队首元素
        System.out.println(queue.peek()); // 输出:2
    

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值