面试ArrayList的理解

Posted lhh666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试ArrayList的理解相关的知识,希望对你有一定的参考价值。

ArrayList也就是动态数组,底层是数组实现的,其API对数组底层访问做了一层封装。(总体回答)

先说说数组,数组在内存中是连续存储的,它的索引速度非常快,赋值和修改元素很快捷。

因为数组是连续存储的,所以Arraylist在内存中也是连续的。

索引Arraylist的时候是要比原生数组慢的,因为你要用get方法,也就是函数调用,而数组就是直接[]访问,相当于直接操作内存地址,速度肯定比函数调用快。

但是数组有不足,在数组的两个数据中间插入数据是很麻烦的,并且在声明数组的时候我们必须同时指定数组的长度,数组的长度过长,会造成内存浪费,数组的长度过短会造成数据的溢出错误。

所以就有了Arraylist来有取舍的优化,ArrayList和Array各有优点和用处。


 

Array和ArrayList的一些不同点:

  • 1、Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
  • 2、Array大小是固定的,ArrayList的大小是动态变化的。
  • 3、ArrayList提供了更多的方法和特性,比如:add(),removeAll(),iterator()等等。所以ArrayList的可操作性就更强了,可以对数据方便的添加、插入和删除。(其实它的插入、删除的效率不高,LinkedList的插入、删除高)
  • 4、ArrayList还存在不安全类型和装箱和拆箱的缺点,可以用泛型解决这些缺点。ArrayList还是线程不安全的,因为它里面的方法不能保证操作的原子性。
  • 5、ArrayList继承了AbstractList,实现了List、RandomAccess[随机访问], Cloneable[可克隆], java.io.Serializable[序列化]。

扩展:序列化是指:将对象转换成以字节序列的形式来表示,以便用于持久化和传输。

以上是关于面试ArrayList的理解的主要内容,如果未能解决你的问题,请参考以下文章

常见ArrayLIst面试题

常见ArrayLIst面试题

面试必问之ArrayList

ArrayList相关面试题

面试必会之ArrayList源码分析&手写ArrayList

(第一期)大厂面试系列_ArrayList 公众号java源码栈