【Java基础】队列Queue、栈stack、常用Api

文章目录

    • 1. 队列Queue
    • 2. 栈Stack
    • 3. 双端队列Deque
    • 4. 优先队列PriorityQueue

1. 队列Queue

【Java基础】队列Queue、栈stack、常用Api_第1张图片

在这里插入图片描述
Deque继承了Queue接口,所以就有队列的所有功能,并且还拓展了普通的队列

        Queue<Integer> queue = new LinkedList<>();(通过普通队列创建)
        Deque<Integer> queue = new LinkedList<>();(通过双端队列创建)

【Java基础】队列Queue、栈stack、常用Api_第2张图片
常用api合集:

入队

返回值 Api
boolean offer(E e)将指定的元素插入到该级队列中。
boolean add(E e)

出队

返回值 Api
E poll()检索并移除此队列的头,或返回 null如果队列为空。
boolean remove(Object o)

队首元素

返回值 Api
E peek()检索,但不删除,这个队列头,或返回 null如果队列为空。
E element()

其他

返回值 Api
boolean contains(Object o):返回 true如果此队列包含指定的元素。
int size():返回此队列中的元素的数目。
void clear():从这个队列中移除所有的元素。

建议使用 :offer()poll()peek()组合


2. 栈Stack

【Java基础】队列Queue、栈stack、常用Api_第3张图片

定义栈的两种方式:
推荐用双端队列实现栈

Stack<Integer> stack1 = new Stack<>();(已过时,不建议使用)
Deque<Integer> stack2 = new LinkedList<>();
  1. Stack stack1 = new Stack<>();:这是一个基于Vector类实现的整型栈。使用push()方法将元素放入栈顶,使用pop()方法将栈顶元素移除并返回,使用peek()方法查看栈顶元素而不移除它。
  2. Deque stack2 = new LinkedList<>();:这是一个基于链表实现的双端队列,也可以用作栈使用。使用push()方法将元素放入栈顶,使用pop()方法将栈顶元素移除并返回,使用peek()方法查看栈顶元素而不移除它。

3. 双端队列Deque

【Java基础】队列Queue、栈stack、常用Api_第4张图片

 Deque<Integer> queue = new LinkedList<>();

在这里插入图片描述
Deque继承了Queue接口,所以就有队列的所有功能,并且还拓展了普通的队列

双端队列包含普通队列所有的功能(当然也就包含栈的功能),并且双端队列可在两头进行元素的操作
【Java基础】队列Queue、栈stack、常用Api_第5张图片
其中 offer --> add 、 poll-->remove 、peek--> get同义替换也是同一个方法,区别在于返回值不同

建议使用图中的api


4. 优先队列PriorityQueue

  1. 优先队列首先他是一个队列,当然具有队列的所有功能
  2. 但是在优先队列中,我们可以规定元素加入队列时,按照定义的规则在元素加入队列后自动进行排序存放在队列中。
  3. 这样就出现了大根堆小根堆(取决于优先队列的排序顺序,小的在前就是小根堆,相反大的在前,就大根堆)
  PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();

默认是对队列进行从小到大的排序的(小根堆)
【Java基础】队列Queue、栈stack、常用Api_第6张图片
那么我们可不可以自定义排序呢,答案是当然可以!!
自定义排序
由于优先队列的构造函数里面可以加入我们自定义的比较接口Comparator
在这里插入图片描述
我们只需要把比较器接口定义好,放到优先队列构造器中,就能按照想要的顺序进行排序

例如让队列元素从大到小排列
【Java基础】队列Queue、栈stack、常用Api_第7张图片
或者以下两种写法都可以:

  1. 直接在队列构造器里面new 比较器接口,并实现接口方法

【Java基础】队列Queue、栈stack、常用Api_第8张图片

  1. 使用Lambda表达式 (o1, o2) -> o2 - o1 替代了匿名内部类,实现了相同的降序排序功能。
    【Java基础】队列Queue、栈stack、常用Api_第9张图片

你可能感兴趣的:(Java,java,开发语言)