面试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的理解的主要内容,如果未能解决你的问题,请参考以下文章