StringBuffer、StringBuilder默认初始化是16个字符,默认增容为(原长度+1)*2,代码如下:
//默认初始化大小
public StringBuilder() {
super(16);
}
// 默认扩容
int newCapacity = (value.length + 1) * 2;
ArrayList、Vector、HashMap、HashTable是如何扩容的
a)ArrayList,默认初始10个大小,每次扩容是原容量的一半,具体代码如下:
public ArrayList() {
this(10);
}
int newCapacity = (oldCapacity * 3)/2 + 1;
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
b)Vector,默认初始10个大小,每次扩容是原容量的两倍,具体代码如下:
public Vector() {
this(10);
}
int newCapacity = (capacityIncrement > 0) ? (oldCapacity + capacityIncrement) : (oldCapacity * 2);
c)HashMap默认初始16个大小(必须是2的次方),默认每次扩容的因子为0.75,具体代码如下:
static final int DEFAULT_INITIAL_CAPACITY = 16;
static final float DEFAULT_LOAD_FACTOR = 0.75f;
public HashMap() {
this.loadFactor = DEFAULT_LOAD_FACTOR;
threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);
table = new Entry[DEFAULT_INITIAL_CAPACITY];
init();
}
resize(2 * table.length);
d)HashTable默认初始11个大小,默认每次扩容的因子为0.75,具体代码如下:
public Hashtable() {
this(11, 0.75f);
}
int newCapacity = oldCapacity * 2 + 1;