深入理解ArrayList和LinkedList!

深入理解ArrayList和LinkedList

ArrayList和LinkedList都是实现了List接口

1 ArrayList底层是由数组来实现的

优点:基于动态的数组实现,有确定的下标,读和改更加容易,存放元素可以重复,也可以为null,有序

缺点:不适合对元素进行频繁的插入和删除,插入和删除都需要做大量的元素移动

特点:集合中默认创建为一个大小为10的数组,执行add方法时,会首先执行ensureCapacity()方法,当元素数量正好为数组大小时,会创建一个新的数组,数组大小为原来数组的1.5倍,然后再将所有元素存放进扩充后的数组

在这里插入图片描述

2 LinkList底层则是由双向链表来实现

优点:由于是由双链表实现的,其头节点和尾节点很容易的进行修改,插入和删除只需修改前一元素的尾节点和后一元素的头节点即可,增删不需要移动原有的元素

缺点:查询和修改需要遍历整个链表来查找元素,不利于查找和修改

特点:执行add方法时,将要插入的位置前一个元素的尾节点指向要插入元素的头节点,要加入元素的头节点指向前一个元素的尾节点,然后要插入元素的尾结点指向后一个元素的头节点,后一个元素的头节点指向要插入元素的尾节点(删除操作类似)

在这里插入图片描述

3、程序测试

当我们创建一个新的ArrayList时,往里面一直添加元素,第一个元素添加后,显示list的size为1,当我们debug进入add方法查看,elementData已经是一个大小为10的数组,说明默认创建就是为一个大小为十的数组

在这里插入图片描述

在这里插入图片描述

当我们添加到第十一个元素时候,再次debug进入add方法,查看此时的elementData数组的大小已经扩充到了15,说明当元素的数量大于当前已经创建的elementData数组的大小时,会对elementData进行扩充,每次扩充1.5倍

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个小白QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值