-
默认初始容量为10。添加第一个元素后,初始化容量10
-
集合底层是一个Object[]数组
-
构造方法
new ArrayList();
new ArrayList(20);
-
ArrayList集合的扩容:
原容量的1.5倍
怎么优化?
尽可能少地扩容。因为数组扩容效率比较低,使用ArrayList集合的
时候预估计元素的个数,给定一个初始化容量。
-
数组有点:
- 检索效率比较高。(每个元素占用空间大小相同,内存地址连续;知道首元素内存地址,知道下标,可以通过数学表达式计算出元素的内存地址,所以检索效率最高。)
-
数组缺点:
- 随机增删元素效率比较低
-
向数组末尾添加元素,效率很高,不受影响。
-
面试常问:
-
这么多集合中,用的哪个集合最多?
ArrayList集合。因为数组末尾添加元素,效率不受影响。
另外,检索/查找某个元素的操作比较多
-
内存结构
双向链表 Vectorimport java.util.*;
/*
Vector:
1、底层也是一个数组。
2、初始化容量:10。
3、扩容之后是原容量的2倍。
10-->20-->40-->80
4、ArrayList集合扩容是原容量的1.5倍。
5、Vector中所有的方法都是线程同步的,都带有synchronized关键字
是线程安全的。效率较低,使用较少了。
6、将线程不安全的ArrayList集合转换成线程安全的
使用集合工具类:
java.util.Collections
java.util.Collection 是集合接口。
java.util.Collections 是集合工具类。
*/
public class VectorTest {
public static void main(String[] args) {
// 创建vector类
Vector vector = new Vector();
// 添加元素
vector.add(0);
vector.add(1);
vector.add(2);
vector.add(3);
vector.add(4);
//遍历
Iterator iterator = vector.iterator();
while (iterator.hasNext()){
Object obj = iterator.next();
System.out.println(obj);
}
// 可能要用!
List list = new ArrayList();// 非线程安全的
//变成线程安全的
Collections.synchronizedList(list);
}
}