博客
关于我
Java 集合之 Queue
阅读量:792 次
发布时间:2023-01-27

本文共 2414 字,大约阅读时间需要 8 分钟。

线性数据结构

队列

队列是一种遵循先进先出(FIFO)原则的数据集合,数据在队列中的流动是单向的,从队尾流向队首。

Queue接口

Queue是标准的集合接口,包含以下关键方法:

  • boolean add(E e):将元素添加到队列中。如果没有空间,会抛出IllegalStateException。
  • boolean offer(E e):尝试将元素添加到队列末尾,不影响其他操作。
  • E remove():从队列头部移除并返回元素,队列为空时抛出NoSuchElementException。
  • E poll():从队列头部移除并返回元素,队列为空时返回null。
  • E element():从队列头部返回元素,但不移除,队列为空时抛出NoSuchElementException。
  • E peek():从队列头部查看元素,队列为空时返回null。

双端队列(Deque)

Deque是一种双端队列,允许在队列的两个端点进行入队和出队操作。

Deque接口

Deque接口继承自Queue,增加了以下功能:

  • void addFirst(E e):将元素添加到队列的前部。
  • void addLast(E e):将元素添加到队列的后部。
  • boolean offerFirst(E e):尝试将元素添加到队列的前部。
  • boolean offerLast(E e):尝试将元素添加到队列的后部。
  • E removeFirst():移除并返回队列前部的元素,队列为空时返回null。
  • E removeLast():移除并返回队列后部的元素,队列为空时返回null。
  • E pollFirst():移除并返回队列前部的元素,队列为空时返回null。
  • E pollLast():移除并返回队列后部的元素,队列为空时返回null。
  • E getFirst():返回队列前部的元素,队列为空时返回null。
  • E getLast():返回队列后部的元素,队列为空时返回null。
  • E peekFirst():查看队列前部的元素,队列为空时返回null。
  • E peekLast():查看队列后部的元素,队列为空时返回null。
  • boolean removeFirstOccurrence(Object o):移除队列中首次出现的指定元素。
  • boolean removeLastOccurrence(Object o):移除队列中最后一次出现的指定元素。

LinkedList类

双向链表

LinkedList实现了双向链表,其核心成员变量包括:

  • first:队列的头节点。
  • last:队列的尾节点。

Node类

Node是链表的基本节点,包含以下成员变量:

  • item:存储元素值。
  • next:指向下一个节点。
  • prev:指向上一个节点。

插入元素

公共方法

  • boolean add(E e):通过调用linkLast(e)添加元素。
  • boolean offer(E e):通过调用add(e)添加元素,并返回true。

添加到末尾

public boolean offer(E e) {    return add(e);}public boolean add(E e) {    linkLast(e);    return true;}private void linkLast(E e) {    final Node l = last;    final Node newNode = new Node(l, e, null);    last = newNode;    if (l == null) {        first = newNode;    } else {        l.next = newNode;    }    size++;    modCount++;}

添加到前端

public boolean offerFirst(E e) {    return addFirst(e);}public void addFirst(E e) {    linkFirst(e);}private void linkFirst(E e) {    final Node f = first;    final Node newNode = new Node(null, e, f);    first = newNode;    if (f == null) {        last = newNode;    } else {        f.prev = newNode;    }    size++;    modCount++;}

删除元素

公共方法

  • public E poll():从头部移除元素。
  • public E pollFirst():从头部移除并返回元素。

移除头部节点

public E poll() {    final Node f = first;    return (f == null) ? null : unlinkFirst(f);}public E pollFirst() {    return unlinkFirst(first);}private E unlinkFirst(Node f) {    final E element = f.item;    final Node next = f.next;    f.item = null;    f.next = null;    first = next;    if (next == null) {        last = null;    } else {        next.prev = null;    }    size--;    modCount++;    return element;}

转载地址:http://jfryk.baihongyu.com/

你可能感兴趣的文章
Java-JUC(五):闭锁(CountDownLatch)
查看>>
Java-JVM 类的初始化
查看>>
Java-rmi-registry反序列化漏洞复现
查看>>
java-se题目
查看>>
Java-slf4j:sfl4j
查看>>
JAVA-【1】配置
查看>>
java-信息安全(九)-基于DH,非对称加密,对称加密等理解HTTPS
查看>>
java-图形用户界面(GUI)之AWT编程-整体思路与代码架构
查看>>
java-如何给表格添加分页
查看>>
Java-环境搭建(Mac版)
查看>>
Java-笔记12
查看>>
java-设计模式-装饰器设计模式,代理设计模式和继承三种扩展方法的比较
查看>>
java.io.IOException: Tried to send an out-of-range integer as a 2-byte value :79944
查看>>
java.io.tmpdir
查看>>
java.lang.ClassNotFoundException: com.fasterxml.classmate.TypeResolver
查看>>
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
查看>>
java.lang.IllegalArgumentException: Control character in cookie value or attribute.
查看>>
java.lang.IllegalArgumentException: Invalid character found in the request target.
查看>>
java.lang.IllegalStateException: Optional int parameter 'id' is not present but cannot be translated
查看>>
java.lang.NoClassDefFoundError: javax transaction SystemException 解决方法!
查看>>