java集合クラスの応用

3515 ワード

Java Collection Fraamewarkは、Javaが提供するセットを定義し、操作し、管理するインターフェースのセット、クラスのアーキテクチャを含む。CollectionインターフェースCollectionは最も基本的な集合インターフェースであり、一つのCollectionはObjectのセットを表し、これらのObjectはCollectionの要素と呼ばれる。Collectionインターフェースを実現するすべてのクラスは、2つの標準的なコンストラクタを提供しなければならない。パラメータなしのコンストラクタは、空のCollectionを作成するために使用され、Collectionパラメータのコンストラクターは、新しいCollectionを作成するために使用され、この新しいCollectionは、着信したCollectionと同じ要素を持つ。後のコンストラクタは、ユーザーがCollectionをコピーすることを可能にする。どのようにCollectionの各要素を遍歴しますか?Collectionの実際のタイプに関係なく、すべてのiterator()の方法をサポートし、この方法は反復子を返し、この反復子を使用してCollectionの各要素に逐次アクセスすることができる。典型的な使い方は以下の通りです。
             Iterator it = collection.iterator(); //         
             while(it.hasNext()) {                    //hasNext           
                        Object obj = it.next(); //         
                        }
用途によっては、CollectionはまたListとSetに分類される。1.ListインターフェースListはCollectionインターフェースから継承される。Listは秩序化されたCollectionであり、このインターフェースを使用して各要素の挿入位置を正確に制御することができる。ユーザは、インデックス(List中の要素の位置、配列の下付きと似ている)を使用してList中の要素にアクセスすることができ、これはJavaの配列と類似している。セットとは違って、Listは重複要素を許容する。e 1.equals(e 2)条件を満たすe 1とe 2オブジェクト要素については、Listセットに同時に存在してもよい。もちろん、Listの実現類は重複要素の存在を許さないこともある。Collectionインターフェースに必要なiterator()方法の他に、ListIterator()方法を提供し、ListIteratorインターフェースを返します。標準的なIteratorインターフェースに比べて、ListIteratorはいくつかのadd()が多くなりました。このような方法で、追加、削除、設定要素ができます。Listインターフェースを実現するのによく使われるのは、Linked List、ArayList、Vector、Stckです。
2.Listインターフェースを実現し、null要素を許可する。さらに、Linked Listは、Linked Listのヘッダまたは末尾にinsert方法を追加のget、removeを提供する。複数のスレッドが同時にListにアクセスする場合は、自分でアクセス同期を実現しなければならない。一つの解決方法は、Listを作成する際に同期したList:List list=Collection.synchronized List(new LinkdList);LinkedList類は汎型を使用し、強制forで巡回します。以下の通りです。
        LinkedList linkedList = new LinkedList();
        linkedList.add("  ");
        linkedList.add("  ");
        for(Iterator iterator = linkedList.iterator();iterator.hasNext();){
                               System.out.println(iterator.next());
        }
3.ArayList類ArayListは可変サイズの配列を実現した。nullを含むすべての要素を許可します。ArayListは同期していない。size,isEmpty,get,set方法の運転時間は定数です。しかし、add法は、割り当てられた定数としてオーバーヘッドされ、n個の要素を追加するには、O(n)の時間が必要である。その他の方法の運転時間は線形です。各ArayList例は、要素を格納するための配列のサイズである容量(Capacity)を有する。この容量は常に新しい要素を追加すると自動的に増加することができるが,成長アルゴリズムは定義されていない。大量の要素を挿入する必要がある場合、挿入前にensureCapacity方法を呼び出すことができ、挿入効率を向上させるためにArayListの容量を増加させる。Linked Listと同様に、ArayListも非同期です。ArayList類は汎型を使用して遍歴しており、以下の通りである。
        ArrayList strings = new ArrayList<>();
        strings.add("  ");
        strings.add("  ");
        int size = strings.size();
        for (int i = 0; i 
4.Vector類はVectorによって作成されたIteratorで、ARrayListによって作成されたIteratorと同じインターフェースですが、Vectorは同期していますので、Iteratorが作成されて使用されています。他のスレッドはVectorの状態(例えば、いくつかの要素を追加または削除しました)を変えて、Iteratorの方法を呼び出します。この異常は必ず捕獲されます。Vector類は汎型を使って遍歴しています。以下の通りです。
        Vector strings = new Vector();
        strings.add("  ");
        strings.add("  ");
        Enumeration elements = strings.elements();
        while(elements.hasMoreElements()){
                    String s = elements.nextElement();
                    System.out.println(s);
        }
注意事項:1、Collectionはget()の方法がなくて、ある元素を取得します。元素はiteratorを通過するしかありません。2、SetとCollectionは同じインターフェースを持っています。3、Listは、get()法により一度に元素を取り出すことができる。一つのオブジェクトの中の一つを数字で選んで、get(0)を…。(add/get)4、ArayListは一般的に使用されます。Linked Listでスタックスタックスタックスタック、キューqueueを作ります。