ArrayList常见面试题

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

目录

前言

一、ArrayList的底层实现原理

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

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

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

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

六、ArrayList和LinkedList的区别

1.底层结构

2.查找效率

3.内存

4.线程安全

总结


前言

  牛马大学生对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的面试题,最简单的语言进行总结

上一篇:Redis中是如何初始化服务器的?


下一篇:Linux——计算机进程基础知识