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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值