队列-Java实现

简介: 队列

队列,先进先出结构


public void offer(E data){
   
        Node<E> node  = new Node<>(data);
        if (head.next == null) {
   
            rear = head;
        }
        while (rear.next != null){
   
           rear = rear.next;
        }
        rear.next = node;
        rear = node;
        rear.next = null;
    }


 public E poll(){
   
        if (isEmpty()){
   
            throw new RuntimeException("队列为空");
        }
        E e = head.next.data;
        head.next = head.next.next;
        return e;
    }


  public E peek(){
   
        if (isEmpty()) {
   
            throw new RuntimeException("队列为空");
        }
        return head.next.data;
    }


总览

package com.collection;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/30 9:50
 */

public class LinkedQueue<E> {
   

    private Node<E> head = new Node<>(null);
    private Node<E> rear = new Node<>(null);


    public void offer(E data){
   
        Node<E> node  = new Node<>(data);
        if (head.next == null) {
   
            rear = head;
        }
        while (rear.next != null){
   
           rear = rear.next;
        }
        rear.next = node;
        rear = node;
        rear.next = null;
    }

    public E poll(){
   
        if (isEmpty()){
   
            throw new RuntimeException("队列为空");
        }
        E e = head.next.data;
        head.next = head.next.next;
        return e;
    }

    public E peek(){
   
        if (isEmpty()) {
   
            throw new RuntimeException("队列为空");
        }
        return head.next.data;
    }

    public boolean isEmpty() {
   
        return head.next == null;
    }

    private static class Node<E> {
   
        private E data;
        private Node<E> next;

        public Node(E data) {
   
            this.data = data;
        }
    }
}


测试

package com.collection;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/29 21:42
 */

public class Main {
   
    public static void main(String[] args) {
   
       LinkedQueue<String> queue = new LinkedQueue<>();
       queue.offer("A");
       queue.offer("B");
       queue.offer("C");
       queue.offer("D");

        System.out.println(queue.peek());
        while (!queue.isEmpty()) {
   
           System.out.println(queue.poll());
       }

    }
}
目录
相关文章
|
16天前
|
存储 监控 Java
JAVA线程池有哪些队列? 以及它们的适用场景案例
不同的线程池队列有着各自的特点和适用场景,在实际使用线程池时,需要根据具体的业务需求、系统资源状况以及对任务执行顺序、响应时间等方面的要求,合理选择相应的队列来构建线程池,以实现高效的任务处理。
97 12
|
3月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
43 2
|
4月前
|
Java API 容器
JAVA并发编程系列(10)Condition条件队列-并发协作者
本文通过一线大厂面试真题,模拟消费者-生产者的场景,通过简洁的代码演示,帮助读者快速理解并复用。文章还详细解释了Condition与Object.wait()、notify()的区别,并探讨了Condition的核心原理及其实现机制。
|
3月前
|
存储 算法 Java
【用Java学习数据结构系列】用堆实现优先级队列
【用Java学习数据结构系列】用堆实现优先级队列
47 0
|
5月前
|
Java
java中的队列
这篇文章通过Java代码示例介绍了使用数组实现队列操作,包括队列的初始化、入队、出队、判断队列满和空以及遍历队列的方法。
java中的队列
|
6月前
|
设计模式 安全 Java
Java面试题:请解释Java中的线程池以及为什么要使用线程池?请解释Java中的内存模型以及如何避免内存泄漏?请解释Java中的并发工具包以及如何实现一个简单的线程安全队列?
Java面试题:请解释Java中的线程池以及为什么要使用线程池?请解释Java中的内存模型以及如何避免内存泄漏?请解释Java中的并发工具包以及如何实现一个简单的线程安全队列?
58 1
|
7月前
|
Java
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
51 1
|
7月前
|
安全 Java
Java Queue新玩法:用LinkedList打造高效队列,让你的代码飞起来!
【6月更文挑战第18天】Java集合框架中的`LinkedList`不仅是列表,还可作为高效队列。由于其在链表两端进行添加/移除操作的时间复杂度为O(1),故适合实现并发环境下的任务队列。通过案例展示了如何创建、添加任务及确保线程安全,揭示了`LinkedList`提升代码性能的秘密,特别是在多线程应用中的价值。
60 4
|
7月前
|
安全 Java 调度
Java Queue深度解析:LinkedList为何成为队列的最佳实践?
【6月更文挑战第18天】Java的`LinkedList`适合作为队列,因其双向链表结构支持O(1)的头尾操作。非线程安全的`LinkedList`在单线程环境下效率高,多线程时可通过`Collections.synchronizedList`封装。此外,它还可兼做栈和双端队列,提供任务调度的高效解决方案。
82 3
|
6月前
|
设计模式 安全 NoSQL
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
83 0