Java基础面试题之ArrayList和LinkedList有什么区别?

Java基础面试题之ArrayList和LinkedList有什么区别?

ArrayList和LinkedList都是List集合的一部分。两者在底层构造上面有着很大的不同。
首先ArrayList的底层构造是数组,其读取速度快,通过其下标就可以访问其数值,在存储方面上它内存连续,可以轻松的看到在内存中占用的大小,但并不能看到实际存储大小,不易扩展,删改速度慢。默认ArrayList的初始长度是10,当数组的长度不够存储数据时,其底层就会调用grow方法去创建一个原先长度1.5的新数组将之前的数据存储到新数组中。在插入数据和删除数据的过程中由于其底层构造是连续的内存单元,删除某一数据或插入某一数据之后的数据需要向前移动,大大降低了增删的效率。
其次LinkedList 的底层实现是链表,其优点是增删快,由于其在内存中的存储不是连续的,上一个数据的指针指向其下一个数据的结点,因此其查询效率低,并不容易看到在内存中占用的大小,但它易扩展,只需在需要扩展的位置找到其上一个结点将上一个结点的指针指向需要扩展的结点,将扩展结点的指针指向插入位置的结点即可完成插入的操作,删除同理。因此其增删的效率远远高于ArrayList。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值