1) 精辟阐述: 能够讲ArrayList想象成“会自动扩增容量的Array”,Array最高效,但其容量固定且不能动态改变
数组
ArrayList 牺牲效率,能够动态扩容
spa
2) 基于类型和效率校验,应尽量使用Array,没法肯定数组大小时才使用ArrayListorm
Array的功能可能过于受限
对象
细节:it
1)效率:
数组扩容是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,若是是,它就会以当前容量的两倍来从新构建一个数组,将旧元素Copy到新数组中,而后丢弃旧数组,在这个临界点的扩容操做,应该来讲是比较影响效率的。编译
ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从通常的意义来讲,它和数组没有本质的差异,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。效率
2)类型识别:
ArrayList存入对象时,抛弃类型信息,全部对象屏蔽为Object,编译时不检查类型,可是运行时会报错。
ArrayList与Array的区别主要就是因为动态增容的效率问题了基础