码迷,mamicode.com
首页 > 其他好文 > 详细

面试ArrayList的理解

时间:2020-06-11 21:19:15      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:方法   继承   eal   持久化   字节序   strong   溢出   形式   面试   

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的理解

标签:方法   继承   eal   持久化   字节序   strong   溢出   形式   面试   

原文地址:https://www.cnblogs.com/lhh666/p/13096035.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!