ArrayDeque简介

欢喜 Java教程 发布时间:2025-08-06 17:30:29 阅读数:1377 1
下文笔者讲述"ArrayDeque简介"说明,如下所示

ArrayDeque简介

`ArrayDeque`是Java中的一个双端队列(Double-ended Queue)实现
   它允许在队列的两端进行元素的插入和删除操作
    `ArrayDeque`是`Deque`接口的一个具体实现,不是线程安全的。

ArrayDeque主要特点

1.基本特性
 -动态数组实现:
    底层使用循环数组实现
 -无容量限制:
    可以根据需要动态扩容
 -非线程安全:
    不提供并发访问保护
 -不允许null元素:
    插入null会抛出 NullPointerException
 -高效性能:
    大多数操作的时间复杂度为 O(1)

2.与Linkedlist比较

// ArrayDeque vs LinkedList 作为 Deque 使用
public class DequeComparison {
    public void comparePerformance() {
        // ArrayDeque - 基于数组,内存局部性好
        Deque<String> arrayDeque = new ArrayDeque<>();
        
        // LinkedList - 基于链表,每个节点需要额外内存
        Deque<String> linkedList = new LinkedList<>();
        
        // ArrayDeque 在大多数操作上性能更好
    }
}

ArrayDeque示例

 1.作为普通队列使用(FIFO)
 
import java.util.ArrayDeque;
import java.util.Deque;

public class QueueExample {
    public void queueOperations() {
        Deque<String> queue = new ArrayDeque<>();
        
        // 入队操作
        queue.offer("first");
        queue.offer("second");
        queue.offer("third");
        
        // 查看队首元素(不移除)
        System.out.println("队首元素: " + queue.peek()); // 输出: first
        
        // 出队操作
        System.out.println("出队: " + queue.poll()); // 输出: first
        System.out.println("出队: " + queue.poll()); // 输出: second
        
        System.out.println("剩余元素数量: " + queue.size()); // 输出: 1
    }
}
 
 2. 作为栈使用(LIFO) 
public class StackExample {
    public void stackOperations() {
        Deque<String> stack = new ArrayDeque<>();
        
        // 入栈操作
        stack.push("first");
        stack.push("second");
        stack.push("third");
        
        // 查看栈顶元素(不移除)
        System.out.println("栈顶元素: " + stack.peek()); // 输出: third
        
        // 出栈操作
        System.out.println("出栈: " + stack.pop()); // 输出: third
        System.out.println("出栈: " + stack.pop()); // 输出: second
        
        System.out.println("剩余元素数量: " + stack.size()); // 输出: 1
    }
}
 
 3.双端操作 
public class DequeOperations {
    public void dequeOperations() {
        ArrayDeque<String> deque = new ArrayDeque<>();
        
        // 从队尾添加
        deque.addLast("tail");
        deque.offerLast("tail2");
        
        // 从队首添加
        deque.addFirst("head");
        deque.offerFirst("head2");
        
        System.out.println("deque: " + deque); // [head2, head, tail, tail2]
        
        // 从队首移除
        System.out.println("移除队首: " + deque.removeFirst()); // head2
        System.out.println("移除队首: " + deque.pollFirst());   // head
        
        // 从队尾移除
        System.out.println("移除队尾: " + deque.removeLast());  // tail2
        System.out.println("移除队尾: " + deque.pollLast());    // tail
    }
}

ArrayDeque内部实现原理

 1. 循环数组结构 
public class ArrayDequeInternal {
    // 简化的内部结构示意
    private Object[] elements;  // 存储元素的数组
    private int head;           // 队首索引
    private int tail;           // 队尾索引
    
    // 当 head == tail 时,队列为空
    // 当 (tail + 1) % elements.length == head 时,队列满(预留一个空位)
}
 
 2. 扩容机制 
public class ResizeExample {
    public void demonstrateResize() {
        ArrayDeque<Integer> deque = new ArrayDeque<>(4); // 初始容量4
        
        // 添加元素触发扩容
        for (int i = 0; i < 10; i++) {
            deque.add(i);
        }
        
        // ArrayDeque 扩容时容量变为原来的2倍
        System.out.println("元素数量: " + deque.size()); // 10
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202508/8508.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者