这段代码是番石榴库的简单代码。
为了便于阅读,我做了简化,原始代码见 =>链接
// Case A
public static <E> ArrayList<E> newArrayList(E... elements) {
int capacity = computeArrayListCapacity(elements.length);
ArrayList<E> list = new ArrayList<E>(capacity);
Collections.addAll(list, elements);
return list;
}
static int computeArrayListCapacity(int arraySize) {
long value = 5L + arraySize + (arraySize / 10);
if (value > Integer.MAX_VALUE) {
return Integer.MAX_VALUE;
}
if (value < Integer.MIN_VALUE) {
return Integer.MIN_VALUE;
}
return (int) value;
}
为什么将容量设置为5L + arraySize + (arraySize / 10)?
3种情况(A,B,C)有什么不同?
//Case B
public static <E> ArrayList<E> newArrayList(E... elements) {
ArrayList<E> list = new ArrayList<E>(elements.length);
Collections.addAll(list, elements);
return list;
}
//Case C
public static <E> ArrayList<E> newArrayList(E... elements) {
ArrayList<E> list = new ArrayList<E>();
Collections.addAll(list, elements);
return list;
}