詳細2のArrayList

リストには、再利用可能なコンテナ秩序です。アクセス要素は、正確にこれらの要素を制御するための要素のインデックスに応じて標識されていてもよい、各要素は、インデックスマークを有するリスト。

一覧共通インタフェースの実装クラス:ArrayListを、LinkedListは、ベクトル。

ArrayListの根本的な配列が実装されています。特徴:高いクエリ効率、低効率の追加や削除、スレッドセーフ。以上の欠失のLinkedListを使用して動作シナリオ、スレッドセーフなコレクションクラスのベクターまたはカプセル化を使用したセキュリティスレッド。

 

1、ArrayListに

パブリッククラスのArrayList <E>は拡張AbstractList <E>が一覧<E>、ランダム・、Cloneableを、直列化を実装

ArrayListのダイナミックアレイによって達成され、ヌルなどを含むすべての要素を、可能にする、オプションのリスト操作のすべてを達成します。Listインタフェースを実装することに加えて、このクラスは、リストを格納する内部配列のサイズを操作するための方法を提供します。

 

図2に示すように、ソースコードを解析

ArrayListのは、空の配列のデフォルトのコンストラクタを作成し、オブジェクトのダイナミックアレイによって実現されます。第1の添加元素、10の膨張能力は、元の容量の後に拡張アルゴリズムは1.5倍である場合。

追加の(1)方法

  / ** 
     *このリストの最後に、指定された要素を追加します。
     * 
     * @paramの電子要素は、このリストに追加される
     * @return <TT>真</ TT>({によって指定さ@link コレクション#アドイン})
      * / 
    パブリック ブール追加(E電子){ 
        ensureCapacityInternal(サイズ + 1 );  // インクリメントmodCount !! 
        elementData [サイズ++] = E。
        返す ; 
    }

 

(2)拡張メソッド

    プライベート ボイド ensureCapacityInternal(INT minCapacityに){
         場合(からelementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA){ 
            minCapacityに = Math.max(DEFAULT_CAPACITY、minCapacityに)。
        } 

        ensureExplicitCapacity(minCapacityに)。
    }
 / ** 
     *それは、少なくとも保持できることを保証するための容量増加
     最小容量引数で指定された要素の*の数を。
     * 
     * @param minCapacityに所望の最小容量
      * / 
    プライベート ボイドが成長する(INT minCapacityに){
         // オーバーフロー意識コード
        INT oldCapacity = elementData.length。
        INT newCapacity = oldCapacity +(oldCapacity >> 1 )。
        もし(newCapacity - minCapacityに<0 
            newCapacity = minCapacityに。
        もし(newCapacity - MAX_ARRAY_SIZE> 0 
            newCapacity = hugeCapacity(minCapacityに)。
        // minCapacityには、サイズに通常近いので、これは勝利です: 
        からelementData = Arrays.copyOf(からelementData、newCapacity)。
    }

 

(3)削除方法

    パブリック E削除(int型のインデックス){ 
        rangeCheck(インデックス)

        modCount ++ ; 
        E OLDVALUE = からelementData(インデックス)

        int型 numMoved =サイズ-インデックス- 1 もし(numMoved> 0 
            System.arraycopyの(からelementData、インデックス +1 、からelementData、インデックス、
                             numMoved)。
        elementData [ --size] = NULL ; // GCはその仕事やらせるために明確な

        リターンをOLDVALUE。
    }

 

3つのArrayListの機能

3.1動的配列は、削除、挿入操作には適していません。

3.2動的配列の過膨張を防止するためには、初期容量の作成与え推奨されます。

以上3.3スレッドセーフ、シングルスレッドで使用するのに適し。

3.4同じタイプの推奨ストレージオブジェクト。

 

4 ArrayListの拡張メソッド

addAll(コレクションC)

removeAll(コレクションC)

retainAll(コレクションC)

containsALll(コレクションC)

indexOf(オブジェクトo)

lastIndexOf(オブジェクトo)

 

 

おすすめ

転載: www.cnblogs.com/Latiny/p/10705934.html