大家在刷java面试题时肯定有遇到过《Array 和ArrayList的区别》这个面试题。
今天就来聊聊他们二者的区别。
长度的区别
Array是数组,声明好之后,其长度就已经固定。
ArrayList底层是用数组实现的,但是ArrayList的长度是可变的,在每次添加时,如果发现空间不足的话,会创建一个长度大概是原来1.5倍的新数组(java8源码),然后把原来的数组元素复制过去。
Array就好像是已经定制好的柜子,就是那么多格子。
而ArrayList是可以自己组装的柜子,格子不够时,就再拼装一些。
ArrayList长度增长
存放数据的区别
Array可以除了可以存放对象类型的数据之外,还可以存放基本数据类型的数据。
而ArrayList只能存放对象数据类型的数据,因为它的类在定义时已经是针对Object的子类做了泛型的约束。
ArrayList如果确实要存放基本数据类型的数据,那只能存放基本数据类型对应的包装类的数据。在数据的存取时可能会涉及到java基本数据类型的自动装箱、自动拆箱。
使用方法的区别
Array数组只能通过数组下标来对指定位置的元素进行变更。
而ArrayList在Array的基础上增加了很多的方法。比如add,addAll,remove,removeAll,contains,以及iterator等等多种丰富的功能方法。
效率上的区别
因为ArrayList是在Array的基础上做了各种丰富多样的功能增强,所以ArrayList效率上自然是不如Array效率高了。
使用场景的区别
针对以上各种区别来说,如果是在整个过程中长度不会变化的话,可是使用Array数组。
如果在使用过程中,大小不固定,可能需要动态增长的话,就需要使用ArrayList了。
但是如果是频繁的增加删除元素的话,ArrayList就又显得不合适了。这块可以翻阅一下我的另一篇文章分析java面试题《ArrayList和LinkedList的区别》。
今天就到这里。大家有什么问题或意见建议都可以在留言里告诉我。