初期容量のセットを指定してください:Javaはセット()詳細

私たちのコレクションは非常に広く使用されている、それは普遍的なコンテナのように、すべてのもの、海の服を着て、ユニバーサルコンテナは(条件が許せば)無限大になることができ、多様性に寛容で、Javaプログラミングの海のようなものです。海の量は、容器が非常に大きくなると海を掘ることは、拡大は人材と財源を大量に消費する必要があるので、その初期容量は、非常に非常に重要になります。同様に、コレクションの初期容量も非常に重要です。だから、:知られているシナリオでは、コレクションの初期容量を指定します。

public static void main(String[] args) {
    StudentVO student = null;
    long begin1 = System.currentTimeMillis();
    List<StudentVO> list1 = new ArrayList<>();
    for (int i = 0; i < 1000000; i++) {
        student = new StudentVO(i, "chenssy_" + i, i);
        list1.add(student);
    }
    long end1 = System.currentTimeMillis();
    System.out.println("list1 time:" + (end1 - begin1));
 
    long begin2 = System.currentTimeMillis();
    List<StudentVO> list2 = new ArrayList<>(1000000);
    for (int i = 0; i < 1000000; i++) {
        student = new StudentVO(i, "chenssy_" + i, i);
        list2.add(student);
    }
    long end2 = System.currentTimeMillis();
    System.out.println("list2 time:" + (end2 - begin2));
}

2つのコード上のデータ1,000,000のリストに挿入されるが、初期容量、初期容量とLIST2 1,000,000 LIST1ないアプリケーションが存在しません。結果は以下の通りであること:

list1 time:1638
list2 time:921

私たちの上からの結果を操作する速度が二回リスト1リスト2の程度であることがわかります。前面のLZが述べたように、ArrayListの膨張機構は、リソースを消費します。私たちは、ArrayListのaddメソッドを見てみましょう。

public boolean add(E e) {  
        ensureCapacity(size + 1);   
        elementData[size++] = e;  
        return true;  
    }  
 
    public void ensureCapacity(int minCapacity) {  
        modCount++;         //修改计数器
        int oldCapacity = elementData.length;    
        //当前需要的长度超过了数组长度,进行扩容处理
        if (minCapacity > oldCapacity) {  
            Object oldData[] = elementData;  
            //新的容量 = 旧容量 * 1.5 + 1
            int newCapacity = (oldCapacity * 3)/2 + 1;  
                if (newCapacity < minCapacity)  
                    newCapacity = minCapacity;  
          //数组拷贝,生成新的数组
          elementData = Arrays.copyOf(elementData, newCapacity);  
        }  
    }

ArrayListのたびに新しい要素、それはあなたが重要なポイントが1.5倍拡大されます達した場合のArrayListの電流容量は、臨界点に達しているかどうかを検出します。しかし、アレイの拡張コピーは新しいArrayListのアレイは、非常に集中的なリソースである生成します。私たちが使用シナリオのコレクションを知っていたのであれば、我々は、コレクションの範囲は、我々は初期容量を指定した最高​​の、このリソースの使用は、特に大量のデータやリソースの使用の前提の下で、さらに良くなるとの効率を向上させることを理解しますそれも、より有利になります。

公開された157元の記事 ウォン称賛43 ビュー90000 +

おすすめ

転載: blog.csdn.net/qq_39581763/article/details/104200119