Java中队列和栈实现——基于集合

Stack在Java中实现

在Java中,栈是一种后进先出(LIFO,Last In First Out)的数据结构。这意味着最后放入栈中的元素将最先被移除。栈的主要操作有两个:入栈(push)和出栈(pop)。除此之外,栈还可以用于查看栈顶元素。

栈的主要操作

  1. push:将元素添加到栈顶。
  2. pop:移除并返回栈顶元素。如果栈为空,通常会抛出异常。
  3. peek:查看栈顶元素,但不移除它。如果栈为空,通常会抛出异常。
  4. isEmpty:检查栈是否为空。
  5. size:获取栈中元素的数量(可选)。

Java中的栈实现

Java标准库提供了一个 Stack 类,这是 Vector 类的子类。虽然可以使用 Stack 类来实现栈,但更推荐使用 Deque 接口的实现,例如 ArrayDeque,因为它们在性能上通常更优。

使用 Stack 类示例
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        stack.push(1);
        stack.push(2);
        stack.push(3);

        System.out.println("栈顶元素: " + stack.peek()); // 输出栈顶元素
        System.out.println("出栈元素: " + stack.pop()); // 输出并移除栈顶元素
        System.out.println("栈是否为空: " + stack.isEmpty());
    }
}
使用 ArrayDeque 示例
import java.util.ArrayDeque;
import java.util.Deque;

public class StackExample {
    public static void main(String[] args) {
        Deque<Integer> stack = new ArrayDeque<>();

        stack.push(1);
        stack.push(2);
        stack.push(3);

        System.out.println("栈顶元素: " + stack.peek()); // 输出栈顶元素
        System.out.println("出栈元素: " + stack.pop()); // 输出并移除栈顶元素
        System.out.println("栈是否为空: " + stack.isEmpty());
    }
}


Queue在Java中实现

在Java中,Queue 是一个用于存储元素的集合数据结构,遵循先进先出(FIFO,First-In-First-Out)的原则。这意味着最早插入的元素最先被移除。Queue 接口是 Java Collections Framework 的一部分,它位于 java.util 包中。

主要特性

  1. FIFO 语义:元素的处理顺序是按照它们被添加的顺序。
  2. 插入和删除:常见操作包括添加元素(enqueue)和移除元素(dequeue)。
  3. 可扩展Queue 接口有多个实现,例如 LinkedListPriorityQueueArrayDeque

常用的方法

  • add(E e):将元素插入队列,如果队列满则抛出异常。
  • offer(E e):将元素插入队列,如果队列满则返回 false
  • remove():移除并返回队列头部的元素。如果队列为空,则抛出异常。
  • poll():移除并返回队列头部的元素,如果队列为空则返回 null
  • peek():返回队列头部的元素,且不移除。若队列为空,返回 null
  • size():返回队列中的元素数量。
  • isEmpty():判断队列是否为空。

常见实现

  1. LinkedList:支持双向链表,适合频繁的队列操作。

    Queue<Integer> queue = new LinkedList<>();
    queue.offer(1);
    queue.offer(2);
    System.out.println(queue.poll()); // 输出 1
    
  2. PriorityQueue:按照自然顺序或自定义排序顺序存储元素,适合需要优先级处理的场景。

    Queue<Integer> priorityQueue = new PriorityQueue<>();
    priorityQueue.offer(2);
    priorityQueue.offer(1);
    System.out.println(priorityQueue.poll()); // 输出 1
    
  3. ArrayDeque:基于动态数组实现,性能优越且可以在两端插入和删除。

    Deque<Integer> deque = new ArrayDeque<>();
    deque.offer(1);
    deque.offer(2);
    System.out.println(deque.poll()); // 输出 1
    

总结

Queue 是一个非常实用的接口,适用于许多需要顺序处理的场景,如任务调度、消息传递等。通过不同的实现类,可以根据需求选择合适的队列类型。

你可能感兴趣的:(java,开发语言,数据结构)