- ArrayList底层是一个Object数组:
//默认初始容量为10
private static final int DEFAULT_CAPACITY = 10;
//底层是一个Object数组
transient Object[] elementData; // non-private to simplify nested class access
//在add时会校验capacity,如果不够,就扩容到1.5倍
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
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);
}
//调用get方法时会调用elementData
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
//将Object对象强转为泛型指定的对象返回出去
E elementData(int index) {
return (E) elementData[index];
}
-
Vector底层也是一个Object数组,初始容量也是10,但它扩容是扩容2倍,他的方法都使用synchronized锁住了。
-
LinkedList底层是一个双向链表,它继承了Deque和List。
-
HashMap底层是一个数组,数组中元素是链表或者红黑树。
-
Hashtable和HashMap一样,底层都是哈希表数据结构。
Hashtable的初始化容量是11,默认加载因子是:0.75f
Hashtable的扩容是:原容量 * 2 + 1
-
目前只需要掌握Properties属性类对象的相关方法即可。
Properties是一个Map集合,继承Hashtable,Properties的key和value都是String类型。
Properties被称为属性类对象。
Properties是线程安全的。