Java学习笔记——Collection之Queue

目录

一、Queue

二、Deque

(一)LinkedList

(二) ArrayDeque

(三)PriorityQueue

(四)常见方法的区别

三、代码

1、Queue

2、Deque

3、PriorityQueue


Queue与List、Set接口并列的Collection的三大接口之一,是一种常见的数据结构,遵循先进先出的原则。

一、Queue

Queue是队列,只能一头进,另一头出。其可由LinkedList实现。

其常见方法:

  • poll():将队首的元素删除,并返回该元素。
  • peek():返回队首的元素,但不进行删除操作。
  • offer():将元素添加到队尾,如果成功,则返回true。

二、Deque

Deque 是JDK 1.6出来的一个新接口,它是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。

(一)LinkedList

双端队列可使用LinkedList实现,代码实例:

// 队列的创建
Queue<String> queue = new LinkedList<>();

// 添加元素
System.out.println("------offer():添加元素------");
queue.offer("Java");
queue.offer("Python");
queue.offer("C");
queue.offer("PHP");
System.out.println(queue);

// 删除元素
System.out.println("------poll(): 删除元素------");
System.out.println("删除的元素: " + queue.poll());
System.out.println(queue);

// 访问元素
System.out.println("------peek(): 访问元素------");
System.out.println("访问的元素: " + queue.peek());
System.out.println(queue);

// 遍历
System.out.println("------遍历------");
for (String q: queue){
    System.out.println(q);
}
------offer():添加元素------
[Java, Python, C, PHP]
------poll(): 删除元素------
删除的元素: Java
[Python, C, PHP]
------peek(): 访问元素------
访问的元素: Python
[Python, C, PHP]
------遍历------
Python
C
PHP

(二) ArrayDeque

双端队列也可使用ArrayDeque实现,例如:

Deque<String> deque = new ArrayDeque<>();

// 添加元素
deque.addFirst("I"); // 添加头部
deque.addLast("Love"); // 添加尾部
deque.addLast("Java");
System.out.println(deque);

System.out.println("------get()------");
System.out.println(deque.getFirst()); // Java  获取头
System.out.println(deque.getLast());  // I     获取尾
System.out.println("--------poll()-------");
System.out.println(deque.poll());     // 弹出栈顶元素
System.out.println("--------push()-------");
deque.push("Python");               // 此时第一个元素为LanQiao
System.out.println(deque.pollFirst());// 弹出头   LanQiao
System.out.println(deque.pollLast()); // 弹出尾   I
deque.addFirst("PHP");
System.out.println("--------peek()--------");
System.out.println(deque.peek()); // 等价于peekFirst(),取出队头元素,但是队列中还是存在该元素
System.out.println(deque.peekFirst());
System.out.println(deque.peekLast());
System.out.println(deque.size()); // 长度还是2
System.out.println("=======real remove=========");
System.out.println(deque.poll()); // poll才是真正的remove
System.out.println(deque.size());
[I, Love, Java]
------get()------
I
Java
--------poll()-------
I
--------push()-------
Python
Java
--------peek()--------
PHP
PHP
Love
2
=======real remove=========
PHP
1

(三)PriorityQueue

PriorityQueue保存队列元素的顺序并不是按照加入的顺序,而是按照队列元素的大小进行排序的。
PriorityQueue不允许插入null元素。

PriorityQueue<Integer> deque = new PriorityQueue<>();
deque.add(5);
deque.add(9);
deque.add(1);
deque.add(-5);
System.out.println(deque);
[-5, 1, 5, 9]

(四)常见方法的区别

(1)add() && offer()

  • 相同点:add()和offer()都是向队列中添加一个元素;
  • 不同点:若队列有大小限制且已满,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方法会返回 false;

(2)poll() && remove()

  • 相同点:remove() 和 poll() 方法都是从队列中删除第一个元素;
  • 不同点:若队列为空时,调用remove()会抛出异常,调用poll() 方法返回 null;

(3)element() && peek()

  • 相同点:element() 和 peek() 用于在队列的头部查询元素;
  • 不同点:若队列为空时,element() 抛出一个异常,而 peek() 返回 null。

三、代码

1、Queue

import java.util.LinkedList;
import java.util.Queue;

public class Day27 {
    public static void main(String[] args){
        // 队列的创建
        Queue<String> queue = new LinkedList<>();

        // 添加元素
        System.out.println("------offer():添加元素------");
        queue.offer("Java");
        queue.offer("Python");
        queue.offer("C");
        queue.offer("PHP");
        System.out.println(queue);

        // 删除元素
        System.out.println("------poll(): 删除元素------");
        System.out.println("删除的元素: " + queue.poll());
        System.out.println(queue);

        // 访问元素
        System.out.println("------peek(): 访问元素------");
        System.out.println("访问的元素: " + queue.peek());
        System.out.println(queue);

        // 遍历
        System.out.println("------遍历------");
        for (String q: queue){
            System.out.println(q);
        }
    }
}

2、Deque

import java.util.ArrayDeque;
import java.util.Deque;

public class Day28 {
    public static void main(String[] args){
        Deque<String> deque = new ArrayDeque<>();

        // 添加元素
        deque.addFirst("I"); // 添加头部
        deque.addLast("Love"); // 添加尾部
        deque.addLast("Java");
        System.out.println(deque);

        System.out.println("------get()------");
        System.out.println(deque.getFirst()); // Java  获取头
        System.out.println(deque.getLast());  // I     获取尾
        System.out.println("--------poll()-------");
        System.out.println(deque.poll());     // 弹出栈顶元素
        System.out.println("--------push()-------");
        deque.push("Python");               // 此时第一个元素为LanQiao
        System.out.println(deque.pollFirst());// 弹出头   LanQiao
        System.out.println(deque.pollLast()); // 弹出尾   I
        deque.addFirst("PHP");
        System.out.println("--------peek()--------");
        System.out.println(deque.peek()); // 等价于peekFirst(),取出队头元素,但是队列中还是存在该元素
        System.out.println(deque.peekFirst());
        System.out.println(deque.peekLast());
        System.out.println(deque.size()); // 长度还是2
        System.out.println("=======real remove=========");
        System.out.println(deque.poll()); // poll才是真正的remove
        System.out.println(deque.size());
    }
}

3、PriorityQueue

import java.util.PriorityQueue;

public class Day29 {
    public static void main(String[] args){
        PriorityQueue<Integer> deque = new PriorityQueue<>();
        deque.add(5);
        deque.add(9);
        deque.add(1);
        deque.add(-5);
        System.out.println(deque);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值