このコードは、guava ライブラリの単純なコードです。
読みやすいように単純化しました。元のコードは =>リンクを参照してください
// 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;
}