【Java基础面试题038】栈和队列在Java中的区别是什么?

发布于:2025-02-11 ⋅ 阅读:(40) ⋅ 点赞:(0)

回答重点

栈(Stack):遵循后进先出(LIFO,Last In,First Out)原则。即,最后插入的元素最先被移除。主要操作包括push(入栈)和pop(出栈)。Java中的Stack类(java.util.Stack)实现了这个数据结构

public class StackTest {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();
        stack.push("apple");
        stack.push("banana");
        stack.push("orange");
        System.out.println(stack);
        stack.pop();
        System.out.println(stack);
        System.out.println(stack.peek());
        stack.forEach(System.out::println);
    }
}

队列(Queue):遵循先进先出(FIFO,First In,First Out)原则。即,最早插入的元素最先被移除。主要操作包括enqueue(入队)和dequeue(出队)。Java中的Queue接口(java.util.Queue)提供了此数据结构的实现,如LinkedList和PriorityQueue

public class QueueTest {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
        queue.addAll(Arrays.asList("apple", "banana", "orange", "grape"));
        queue.forEach(System.out::println);
    }
}

使用场景:

  • 栈:常用于函数调用、表达式求值、回溯算法(如深度优先搜索)等场景
  • 队列:常用于任务调度、资源管理、数据流处理(如广度优先搜索)等场景

扩展知识

栈的变体:

  • 双端队列(Deque):支持在两端插入和删除元素,可以用作栈或队列。java.util.ArrayDeque和java.util.LinkedList都实现了Deque接口,提供了栈和队列功能

队列的变体:

  • 优先队列(PriorityQueue):队列中的元素按优先级排序,而不是按插入排序。适用于需要按优先级处理任务的场景
  • 阻塞队列(BlockingQueue):支持阻塞操作,特备适合多线程环境中的生产者-消费者问题。常用实现包括ArrayBlockingQueue、LinkedBlokingQueue和PrioriryBlockingQueue


网站公告

今日签到

点亮在社区的每一天
去签到