ArrayList常见面试题

参考b站,整理arraylist常见面试题 


前言

  牛马大学生对java常见面试题ArrayList进行日常记录,简单的理解总结,供大家进行参考


一、ArrayList的底层实现原理

   ArrayList的底层使用的是动态数组,初始化容量为0,第一次添加数据的时候初始化容量为10,每次扩容为1.5倍扩容,扩容需要拷贝原来数组

  添加数据,需要保证数组的长度size+1可以存下一个数据,如果当前已用size+1大于数组的长度,则使用grow方法进行扩容,将元素添加到size位置,返回成功的布尔值

二、ArrayList list = new ArrayLsit(10)扩容了几次?

  扩容了0次,他只是声明了一个容量为10的数组

三、数组和集合List之间如何转换?

数组转List集合:Arrays中的方法asList

List集合转数组:toArray方法,参数是初始化长度的数组对象

四、Arrays.asList转为集合后,修改原数组,集合的值改不改变?

改变

五、toArray后,修改原集合,数组改不改变?

不改变

六、ArrayList和LinkedList的区别

1.底层结构

ArrayList底层使用的是动态数组,LinkedList底层使用的是双链表

2.查找效率

查找指定下标:ArrayList的时间复杂度是O(1),LinkedList不支持下表查找

查找随机下标:都需要进行遍历,都是O(n)

新增和删除:ArrayList的尾部增删时间复杂度是O(1),其他是O(n)

                      LinkedList头尾增删时间复杂度是O(1),其他是O(n)

3.内存

ArrayList内存连续,占用内存少

LinkedList内存不连续,链表存储前后节点的引用,内存消耗大

4.线程安全

  他们的线程都不安全,如果想要他们的线程安全,可以使用为局部变量,在局部方法内使用,或者使用collection的synchronizedlist方法进行包装


总结

    最基本的常见关于Arraylist的面试题,最简单的语言进行总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

载着梦想的猪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值