默认初始容量为10(底层先创建一个长度为0的数组, 当调用add方法添加第一个元素时,分配10个对象空间)
集合底层是一个Object[]数组
构造方法: new ArrayList() 分配默认容量 new ArrayList(20) 创建一个容量为20的ArrayList集合 new ArrayList(其他类型集合的引用) 将其他类型集合转换为ArrayList类型
ArrayList集合的扩容: 每次增长到原来的1.5倍(10、15、22、、、) 如何去优化: 因此当我们确定添加元素的个数的时候, 我们可以事先知道并指定ArrayList的可存储元素的个数, 这样当我们向ArrayList中加入元素的时候, 就可以避免ArrayList的自动扩容,从而提高ArrayList的性能。 详细可参见这篇blog: https://blog.csdn.net/qiangxuan520/article/details/82664274
数组优点:检索效率 高 第一:Java的数组中存储的每个元素类型一致,也就是说每个元素占用的空间大小相同。
第二:Java的数组中存储的每个元素在空间存储上,内存地址是连续状态的。
第三:通常首元素的内存地址作为整个数组对象的内存地址,可见我们是知道首元素内存地址的。
第四:再加上数组中的元素是有下标的,有下标就可以计算出被查找的元素和首元素的偏移量。
数组的缺点: 随机增删元素效率低,因为每次插入元素或者删除中间某个元素需要用到数组拷贝方法 无法存储大数据量,因为难以找到一块巨大的连续的内存空间
向数组末尾添加元素,效率不受影响
实际开发中ArrayList使用频率高,因为检索/查找某个元素的操作比较多, 而且只要向数组末尾添加元素,效率就不受影响
import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; public class ArrayListTest01 { public static void main(String[] args) { //默认初始化容量10 List list1 = new ArrayList(); //指定初始化容量为100 List list2 = new ArrayList(100); Collection c = new HashSet(); c.add("abc"); c.add(100); //将HashSet类型集合转换成ArrayList集合 List list3 = new ArrayList(c); //遍历 for (int i = 0; i < list3.size(); i++) { System.out.println(list3.get(i)); } } }