【Java基础】ArrayList和LinkedList的区别与联系

ArrayList和LinkedList的区别与联系

相同点:

        1.两者都实现了List接口

        2.两者都是线程不安全的

不同点:

        1.从底层数据结构说

                ArrayList的底层数据结构是动态数组,也就是数组

                        数组在内存中的存储结构是连续的

                LinkedList的底层数据结构是双向链表

                        链表在内存中的存储结构式不连续的

        2.从查询来说

                ArrayList.get(index)时间复杂度为O(1),因为是直接从底层数组下标获取的

                LinkedList.get(index)时间复杂度为O(n),因为需要遍历整个链表

        3.从添加角度来说

                ArrayList

                        add(E e)会默认将元素添加到数组末尾,不考虑扩容的情况下,时间复杂度为O(1)

                        add(index,E e)将新的元素插入到指定位置,时间复杂度为O(n),是先移动,在修改

                LinkedList

                        add(index,E e)需要先遍历,在插入到指定位置,时间复杂度为O(n)

                        addFirst和addLast时间复杂度为O(1)

        4.从删除的角度来说

                ArrayList.remove(index)将指定位置上的元素删除,因为要移动底层数组,所以时间复杂度为O(n)

                LinkedList.remove(index)将制定位置上的元素删除,因为要先遍历查找,时间复杂度为O(n)

        5.从遍历的角度来说

                ArrayList可以使用for循环遍历,也可以使用迭代器遍历

                LinkedList可以使用for循环遍历,也可以使用迭代器遍历,但是LinkedList使用for循环遍历效率极低,因为for循环中每次get值都需要从链表同步或者尾部逐一遍历

100050001000050000100000
ArrayList0ms1ms2ms3ms3ms
LinkedList3ms16ms88ms2446ms18848ms

注意事项

        ArrayList的效率并不一定比LinkedList的插入效率低,当规定好合适的ArrayList大小,并采用尾插法插入数据,ArrayList可以极大的提高性能,甚至超过LinkedList

        因为LinkedList的底层是双向链表,每插入一个数据会创建一个Node对象,并且还有额外的空间指向下一个节点和上一个节点,所以时间和空间的消耗也会较大

参考文章

膜拜!华为大牛透彻讲解Java面试100道必考题,不管你工作几年,都得看看!现在免费分享给大家!_哔哩哔哩_bilibili阿里面试官:说一下ArrayList和LinkedList的区别?_沉默王二-CSDN博客膜拜!华为大牛透彻讲解Java面试100道必考题,不管你工作几年,都得看看!现在免费分享给大家!_哔哩哔哩_bilibili

切勿用普通for循环遍历LinkedList_zhangyuan19880606的专栏-CSDN博客_linkedlist可以用for循环遍历吗

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值