当前位置:首页 > Java

java如何实现队列

2026-03-18 02:29:04Java

队列的基本概念

队列是一种先进先出(FIFO)的数据结构,支持在队尾添加元素(入队),在队头移除元素(出队)。Java中可通过多种方式实现队列,包括内置类和自定义实现。

使用Java内置队列类

Java集合框架提供了多种队列实现,可直接调用:

java如何实现队列

  1. LinkedList:支持队列操作的双向链表。
    Queue<Integer> queue = new LinkedList<>();
    queue.offer(1); // 入队
    queue.poll();    // 出队
  2. ArrayDeque:基于数组的双端队列,性能优于LinkedList。
    Queue<String> deque = new ArrayDeque<>();
    deque.offer("A");
    deque.poll();
  3. PriorityQueue:基于优先级的堆实现,元素按顺序出队。
    Queue<Integer> pq = new PriorityQueue<>();
    pq.offer(3);
    pq.poll(); // 按自然顺序出队

自定义数组实现队列

通过数组和指针模拟队列操作:

java如何实现队列

public class ArrayQueue {
    private int[] data;
    private int front, rear, size;

    public ArrayQueue(int capacity) {
        data = new int[capacity];
        front = rear = size = 0;
    }

    public void enqueue(int value) {
        if (size == data.length) throw new IllegalStateException("Queue full");
        data[rear] = value;
        rear = (rear + 1) % data.length; // 循环数组
        size++;
    }

    public int dequeue() {
        if (size == 0) throw new NoSuchElementException("Queue empty");
        int value = data[front];
        front = (front + 1) % data.length;
        size--;
        return value;
    }
}

链表实现队列

使用链表节点动态管理元素:

public class LinkedQueue {
    private static class Node {
        int value;
        Node next;
        Node(int value) { this.value = value; }
    }

    private Node head, tail;

    public void enqueue(int value) {
        Node newNode = new Node(value);
        if (tail == null) head = tail = newNode;
        else {
            tail.next = newNode;
            tail = newNode;
        }
    }

    public int dequeue() {
        if (head == null) throw new NoSuchElementException();
        int value = head.value;
        head = head.next;
        if (head == null) tail = null;
        return value;
    }
}

线程安全队列

多线程环境下可使用ConcurrentLinkedQueueBlockingQueue实现:

Queue<String> concurrentQueue = new ConcurrentLinkedQueue<>();
BlockingQueue<Integer> blockingQueue = new LinkedBlockingQueue<>();

注意事项

  • 数组实现需处理循环索引和扩容问题。
  • 链表实现需注意头尾指针的更新。
  • 线程安全场景选择并发集合类。

分享给朋友:

相关文章

vue项目如何实现

vue项目如何实现

Vue项目实现步骤 环境搭建 确保已安装Node.js和npm。使用Vue CLI创建项目: npm install -g @vue/cli vue create my-project cd my-…

vue如何实现两栏布局

vue如何实现两栏布局

使用Flexbox实现两栏布局 Flexbox是CSS3中强大的布局方式,可以轻松实现两栏布局。在Vue中可以直接在组件的style标签中使用。 <template> <div…

js双击事件如何实现

js双击事件如何实现

实现双击事件的方法 在JavaScript中,可以通过监听dblclick事件或手动检测两次点击的时间间隔来实现双击事件。以下是几种常见的方法: 使用原生dblclick事件 element.add…

vue如何实现登录

vue如何实现登录

Vue 实现登录功能的方法 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,通常命名为 Login.vue。表单包含用户名和密码输入框,以及提交按钮。 <template>…

vue如何实现mvvm

vue如何实现mvvm

Vue 的 MVVM 实现原理 Vue 通过数据绑定和响应式系统实现 MVVM(Model-View-ViewModel)模式。其核心在于将数据模型(Model)与视图(View)通过 ViewMod…

h5页面如何实现

h5页面如何实现

实现H5页面的方法 H5页面是基于HTML5技术的网页,通常用于移动端和响应式设计。以下是实现H5页面的关键步骤和技术要点。 基础结构 使用HTML5的DOCTYPE声明作为页面的起始。HTML5简…