如何保存数据?Object类型的一维数组
transient Object[] elementData;
数组初始长度是多少?10
private static final int DEFAULT_CAPACITY = 10;
ArrayList是如何动态扩容的?如果数据的个数超过原来的容量,就将容量扩展为原来的1.5倍,然后复制数据到新数组中。
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1); //扩容1.5倍
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity); //复制数据到新数组中
}
[](()Vector集合
Vector集合与ArrayList相似:
-
数据结构都是一维数组
-
方法完全相同
不同点:
-
ArrayList是非线程安全,Vector是线程安全
-
ArrayList性能更高
[](()泛型集合
==================================================================
下面代码可能出现什么问题?
List list = new ArrayList();
list.add(100);
list.add(“123”);
int n = (int)list.get(1); //存在类型转换的错误
String s = (String)list.get(0); //存在类型转换的错误
非泛型的集合,添加数据的类型没有限制,在取出数据进行类型转换时,存在类型不兼容的问题。
使用泛型集合,就能解决这个问题。
创建方法:
ArrayList<类型> arrayList = new ArrayList<类型>();
例如:
ArrayList arrayList = new ArrayList();
ArrayList arrayList = new ArrayList();
后面的类型可以省略
ArrayList arrayList = new ArrayList<>();
优点:
-
只能添加一种类型的数据,不容易出错
-
不用类型转换,提