长度的区别
- Array是数组,声明好长度之后,其长度就已经固定
ArrayList底层是用数组实现的,但是ArrayList的长度是可变的,初始容量为10,在每次添加时,如果发现空间不足的话,就会扩容,会创建一个长度是原来的1.5倍的新数组,为什么是1.5倍?
- 我们也可以了解到, 为什么ArrayList每次扩容会 扩容到原来的 1.5 倍 , 但为什么不扩容到 1.2 或者 2 倍呢 , 因为 1.2 未免扩容空间太小 , 而 2 倍则扩充的空间太大 ,所以权衡之下 , 采用扩容1.5倍的做法
存放数据的区别
- Array除了可以存放对象类型的数据之外,还可以存放基本数据类型。
- 而ArrayList只可以存放对象类型的数据,因为它的类在定义时已经时针对Object的子类做了泛型约束。如果想要存放基本数据类型的数据,可以存放基本数据类型的包装类的数据
使用方法的区别
- Array数组只能通过数组下标来对指定的元素进行变更
- 而ArrayList在Array的基础上增加了很多方法。比如add,allAll,remove,removeAll,contains
效率上的区别
- 因为ArrayList的底层是Array,所以ArrayList的效率自然比不上Array的效率。
类型安全
- ArrayList是类型安全的,因为它支持泛型,泛型允许编译器检查ArrayList中的存储的所有对象类型是否正确,而数组不支持泛型,它是通过抛出ArrayStoreException来提供运行时类型检查。
迭代
- ArrayList提供了很多迭代方式
- Array只能用for,while,for循环的增强和do-while来遍历数组。