import java.util.ArrayList;
import java.util.List;
/**
* ArrayList集合:
* 1、默认初始化容量10(底层先创建了一个长度为0的数组,当添加第一个元素的时候,初始化容量10。)
* 2、集合底层是一个Object[]数组。
* 3、构造方法:
* new ArrayList();
* new ArrayList(20);
* 4、ArrayList集合的扩容:
* 增长到原容量的1.5倍。
* ArrayList集合底层是数组,怎么优化?
* 尽可能少的扩容。因为数组扩容效率比较低,建议在使用ArrayList集合
* 的时候预估计元素的个数,给定一个初始化容量。
* 5、数组优点:
* 检索效率比较高。(每个元素占用空间大小相同,内存地址是连续的,知道首元素内存地址,
* 然后知道下标,通过数学表达式计算出元素的内存地址,所以检索效率最高。)
* 6、数组缺点:
* 随机增删元素效率比较低。
* 另外数组无法存储大数据量。(很难找到一块非常巨大的连续的内存空间。)
* 7、向数组末尾添加元素,效率很高,不受影响。
* 8、面试官经常问的一个问题?
* 这么多的集合中,你用哪个集合最多?
* 答:ArrayList集合。
* 因为往数组末尾添加元素,效率不受影响。
* 另外,我们检索/查找某个元素的操作比较多。
*
* 7、ArrayList集合是非线程安全的。(不是线程安全的集合。)
*/
public class ArrayListTest01 {
public static void main(String[] args) {
// 默认初始化容量是10
// 数组的长度是10
List list =new ArrayList();
// 集合的size()方法是获取当前集合中元素的个数。不是获取集合的容量。
System.out.println(list.size());//0
// 指定初始化容量
// 数组的长度是10
List list1=new ArrayList(10);
for(int i=1;i<=10;i++){
list.add(i);
}
// 再加一个元素,此时超出初始容量,自动扩容
System.out.println(list.size());
list.add(11);
/*
int newCapacity = ArraysSupport.newLength(oldCapacity,minCapacity - oldCapacity,oldCapacity >> 1);
*/
// 100 二进制转换成10进制: 00000100右移一位 00000010 (2) 【4 / 2】
// 原先是4、现在增长:2,增长之后是6,增长之后的容量是之前容量的:1.5倍。
// 6是4的1.5倍
System.out.println(list.size());
}
}
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
/**
* 集合ArrayList的构造方法
*/
public class ArrayListTest02 {
public static void main(String[] args) {
//默认初始化容量10
List list=new ArrayList();
//指定初始化容量为20
List list1=new ArrayList(20);
//创建一个HashSet集合
Collection c=new HashSet();
c.add(1);
c.add(2);
//通过构造方法可以将HashSet集合转换成List集合
List list2=new ArrayList(c);
for(int i=0;i<list2.size();i++){
System.out.println(list2.get(i));
}
}
}