• Deque继承ArrayDeque和继承LinkedList区别在哪里


    在这里插入图片描述

    在Java中,ArrayDequeLinkedList都是Deque接口的实现类,但它们的内部实现和性能特性有一些不同。

    ArrayDeque

    1. 内部实现ArrayDeque使用动态数组(resizable array)来实现,它允许在两端高效地进行元素的插入和删除操作。

    2. 随机访问:由于使用数组实现,ArrayDeque支持通过索引进行随机访问,因此可以在O(1)的时间复杂度内访问任何位置的元素。

    3. 空间复杂度:相对于LinkedListArrayDeque在存储相同数量的元素时通常使用更少的内存,因为它不需要为每个元素保存额外的指针。

    LinkedList

    1. 内部实现LinkedList使用双向链表来实现,这使得在两端(头部和尾部)进行元素的插入和删除操作非常高效,但随机访问的性能较差。

    2. 非随机访问:由于使用链表实现,LinkedList不支持通过索引进行直接的随机访问,而是需要从头或尾开始遍历链表。

    3. 插入和删除:在中间位置的插入和删除操作相对较快,因为只需要修改相邻节点的指针,而不需要移动整个数组。

    总结:

    • 如果你的主要操作是在两端进行插入和删除,并且需要高效的随机访问,那么ArrayDeque可能是更好的选择。
    • 如果你的主要操作是在中间位置进行插入和删除,或者你更关心迭代和顺序访问,那么LinkedList可能更合适。

    在选择使用哪个类时,要根据具体的使用场景和性能需求来决定。

    相关题目

    package 代码随想录..一般数_森林;
    
    import 代码随想录..TreeNode;
    
    import java.util.ArrayDeque;
    import java.util.Deque;
    import java.util.LinkedList;
    
    public class _101对称二叉树_迭代法 {
        /**
         * 就你构造两个队列去入栈出栈去比较
         * 或者直接在双端队列的两侧去进行比较
         *
         * @param root
         * @return
         */
        public boolean isSymmetric(TreeNode root) {
            if (root.left == null && root.right == null){  //树中节点数目在范围 [1, 1000] 内
                return true;
            }
            Deque<TreeNode> myDeque = new LinkedList<TreeNode>();   //一般迭代就用LinkedList
            myDeque.offerFirst(root.left);  //左前右后
            myDeque.offerLast(root.right);
            while (!myDeque.isEmpty()){
                TreeNode leftNode = myDeque.pollFirst();
                TreeNode rightNode = myDeque.pollLast();
                if (leftNode == null && rightNode == null){
                    continue;
                }
                if (leftNode == null || rightNode == null){
                    return false;
                }
                if (leftNode.val!= rightNode.val){
                    return false;
                }
                myDeque.offerFirst(leftNode.left);
                myDeque.offerLast(rightNode.right);
                myDeque.offerFirst(leftNode.right);
                myDeque.offerLast(rightNode.left);
            }
            return true;
        }
    }
    
    
    • 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
    • 43
    • 44
  • 相关阅读:
    ASP.NET Core 6框架揭秘实例演示[08]:配置的基本编程模式
    正则表达式
    ES6 入门—ES6 迭代器
    移动端(Android、iOS)内存泄漏检测方法
    成功的程序化交易者需要具备什么技能?
    docker安装nessus
    PTA 浙大版《C语言程序设计(第4版)》题目集 参考答案(函数题)
    Fighting Design - 由个人开发的 Vue3 前端组件库,上手使用简单、灵活
    踩坑记:JSON.parse和JSON.stringify
    R语言线性回归模型拟合诊断异常值分析家庭燃气消耗量和卡路里实例带自测题
  • 原文地址:https://blog.csdn.net/weixin_43554580/article/details/134501529