1. 程式人生 > 其它 >guava下Lists,newArrayListWithExpectedSize()和newArrayListWithCapacity()使用示例

guava下Lists,newArrayListWithExpectedSize()和newArrayListWithCapacity()使用示例

guava  Lists下通過了兩個建立指定容量的list方法,newArrayListWithExpectedSize,newArrayListWithCapacity。它們主要的區別如下:

 

public static <E> ArrayList<E> newArrayListWithCapacity(int initialArraySize) {
        CollectPreconditions.checkNonnegative(initialArraySize, "initialArraySize");
        return new ArrayList(initialArraySize);
    }
public static <E> ArrayList<E> newArrayListWithExpectedSize(int estimatedSize) {
        return new ArrayList(computeArrayListCapacity(estimatedSize));
    }



@VisibleForTesting
    static int computeArrayListCapacity(int arraySize) {
        CollectPreconditions.checkNonnegative(arraySize, 
"arraySize"); return Ints.saturatedCast(5L + (long)arraySize + (long)(arraySize / 10)); }

通過方法**Size引數建立一個定容的集合。

1、如果你確定你的容器裝多少個,不會改變,一般直接使用

newArrayListWithCapacity(),如果容器超過定義size,它會自動擴容,不用擔心容量不夠。擴容後,會將原來的陣列複製到新的陣列中,但擴容會帶來一定的效能影響:包括開闢新空間,copy資料,耗時,耗效能

2、如果你的不確定你的容器多少個,但增幅不會太大,使用

newArrayListWithExpectedSize(),會直接建立一個指定size的容器,但它會通過一條公式計算來進行擴容 (

5L + (long)arraySize + (long)(arraySize / 10)

),

例如,建立一個10個size的容器,那麼 5+10 + (10/10) = 16,當容器新增第17個數據時,這個容器才會進行擴容,優點:節約記憶體,節約時間,節約效能,