• 【Java】使用`LinkedList`类来实现一个队列,并通过继承`AbstractQueue`或者实现`Queue`接口来实现自定义队列


    使用LinkedList类来实现一个队列,并通过继承AbstractQueue或者实现Queue接口来实现自定义队列。

    以下是一个简单的示例,其中队列的大小与另一个List的容量保持一致:

    import java.util.LinkedList;
    import java.util.List;
    import java.util.Queue;
    
    public class DynamicSizeQueue<T> extends AbstractQueue<T> {
    
        private Queue<T> queue;
        private List<?> list;
    
        public DynamicSizeQueue(List<?> list) {
            this.queue = new LinkedList<>();
            this.list = list;
        }
    
        @Override
        public boolean offer(T t) {
            if (list.size() == queue.size()) {
                return false; // 队列已满,无法添加新元素
            }
            return queue.offer(t);
        }
    
        @Override
        public T poll() {
            return queue.poll();
        }
    
        @Override
        public T peek() {
            return queue.peek();
        }
    
        @Override
        public int size() {
            return queue.size();
        }
    
        @Override
        public java.util.Iterator<T> iterator() {
            return queue.iterator();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    在这个示例中,我们创建了一个名为DynamicSizeQueue的类,它继承自AbstractQueue并持有一个LinkedList作为内部队列。在构造函数中,我们传入了另一个List作为参考,以便保持队列大小与该List的容量一致。

    offer方法用于添加元素

    在队列已满时返回falsepoll方法用于取出队首元素并删除,peek方法用于获取队首元素但不删除,size方法用于获取队列大小。我们还实现了iterator方法以支持遍历队列。
    在Java中,offerpollpeekQueue接口中定义的方法,它们用于操作队列中的元素。

    1. offer方法用于向队列中添加一个元素,如果队列已满则返回false。其方法签名为boolean offer(E e),其中E是队列中存储的元素类型。示例代码如下:
    Queue<Integer> queue = new LinkedList<>();
    boolean result = queue.offer(5);
    
    • 1
    • 2
    1. poll方法用于获取并移除队列的头部元素,如果队列为空则返回null。其方法签名为E poll(),其中E是队列中存储的元素类型。示例代码如下:
    Queue<Integer> queue = new LinkedList<>();
    Integer result = queue.poll();
    
    • 1
    • 2
    1. peek方法用于获取队列的头部元素但不移除,如果队列为空则返回null。其方法签名为E peek(),其中E是队列中存储的元素类型。示例代码如下:
    Queue<Integer> queue = new LinkedList<>();
    Integer result = queue.peek();
    
    • 1
    • 2

    总结:

    • offer用于添加元素到队列,如果队列已满则返回false
    • poll用于获取并移除队列头部的元素,如果队列为空则返回null
    • peek用于获取队列头部的元素但不移除,如果队列为空则返回null
      在Java中,如果您想要实现在添加新元素时挤出最旧的元素,您可以使用Queue接口的offerpoll方法来实现。通过在调用offer方法之后检查队列的大小,如果队列大小超过了您希望的大小,可以调用poll方法来移除最旧的元素。

    调用poll方法移除最旧的元素。

    使用offer方法添加新元素,poll方法获取并移除头部元素,peek方法获取头部元素但不移除,size方法获取队列大小。

    public boolean offer(T element) {
            if (queue.size() >= maxSize) {
                queue.poll(); // 移除最旧的元素
            }
            return queue.offer(element); // 添加新元素
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu交叉编译Arm Linux环境下的身份证读卡器so库操作步骤
    Java EE——计算机工作原理
    移动的迷宫
    迅为龙芯开发板Linux工具之make工具和Makefile文件
    Rethinking the Inception Architecture for Computer Vision--Christian Szegedy
    企业数据的存储形式与方案选择
    POD创建与删除简单描述
    【游记】CSP2023-S2
    【算法】算法题总结
    NiFi中缓存组件的运行机制及增删改缓存数据
  • 原文地址:https://blog.csdn.net/gao511147456/article/details/136587756