ホームページ >Java >&#&チュートリアル >2 つの特殊な Java コンテナ クラス List および Set の分析
コンテナ クラスにより、プログラミング効率とプログラミング機能が大幅に向上します。Java2 では、すべてのコンテナが SUN Company の Joshua Bloch によって再設計され、コンテナ クラス ライブラリの機能が強化されました。
Java2 コンテナ クラス ライブラリの目的は「オブジェクトを保存する」ことであり、これは 2 つのカテゴリに分類されます:
コレクション ---- 独立した要素のセット。通常、これらの要素は特定のルールに従います。 List は要素の特定の順序を維持する必要がありますが、Set は重複した要素を持つことができません。
マップ -- 「キーと値のペア」オブジェクトのセット。つまり、その要素はペアになったオブジェクトです。最も典型的なアプリケーションはデータ ディクショナリであり、他にも広範なアプリケーションがあります。さらに、Map は、すべてのキーで構成される Set とそのすべての値で構成される Collection、またはそのキーと値のペアで構成される Set を返すことができ、また、次の条件を満たす限り、配列のように多次元 Map を拡張することもできます。マップ内のキーと値のペアの各「値」「これは単なるマップです。
1. イテレーター
イテレーターは、開発者がシーケンスの基礎となる構造を知らなくても、シーケンス内のオブジェクトを反復して選択できるオブジェクトであるデザイン パターンです。イテレータは、作成コストが低いため、「軽量」オブジェクトと呼ばれることがよくあります。
Java の Iterator 関数は比較的単純で、一方向にのみ移動できます:
(1) メソッド iterator() を使用して、コンテナに Iterator を返すように要求します。 Iterator の next() メソッドが初めて呼び出されるとき、シーケンスの最初の要素が返されます。
(2) next() を使用して、シーケンス内の次の要素を取得します。
(3) hasNext() を使用して、シーケンス内にまだ要素があるかどうかを確認します。
(4) 反復子によって新たに返された要素を削除するには、remove() を使用します。
Iterator は、List 用に設計された Java イテレータの最も単純な実装であり、List を双方向に走査でき、List から要素を挿入したり削除したりすることもできます。
2. List の関数メソッド
List(インターフェース): 順序は List の最も重要な機能であり、要素の特定の順序が確実に維持されます。 List は Collection に多くのメソッドを追加し、List への要素の挿入と削除を可能にします (LinkedList にのみ推奨)。 List は ListIterator を生成できます。これを使用すると、List を 2 方向に走査したり、List の途中で要素を挿入したり削除したりすることができます。
ArrayList: 配列によって実装されたリスト。これにより、要素への高速なランダム アクセスが可能になりますが、リストの途中で要素を挿入したり削除したりするのは非常に遅くなります。 ListIterator は、LinkedList よりもはるかにコストがかかるため、要素の挿入や削除ではなく、ArrayList を後ろから前に走査するためにのみ使用する必要があります。
LinkedList: 順次アクセスは最適化されており、リストの途中での挿入と削除はコストがかかりませんが、ランダム アクセスは比較的遅くなります (代わりに ArrayList を使用できます)。これにはメソッド addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast() があります。これらのメソッド (どのインターフェイスまたは基本クラスにも定義されていません) を使用して、LinkedList をスタック、キュー、および双方向キューを使用します。
3. Set の関数メソッド
Set(インターフェース): Set は重複した要素を保存しないため、Set に保存される各要素は一意である必要があります。 Set に追加されるオブジェクトは、オブジェクトの一意性を保証するために、equals() メソッドを定義する必要があります。 Set と Collection はまったく同じインターフェイスを持っています。 Set インターフェイスは、要素の順序が維持されることを保証しません。
HashSet: 素早い検索のために設計されたセット。 HashSet に格納されるオブジェクトは hashCode() を定義する必要があります。
TreeSet: 順序を維持するセットで、最下位にツリー構造があります。これを使用して、セットから順序付けされたシーケンスを抽出します。
LinkedHashSet: HashSet のクエリ速度を持ち、内部的にリンク リストを使用して要素の順序 (挿入順序) を維持します。したがって、反復子を使用して Set を走査すると、結果は要素が挿入された順序で表示されます。
HashSet は、高速クエリ用に特別に設計されたハッシュ関数を使用して要素を並べ替えます。TreeSet は、内部でハッシュを使用して要素を並べ替え、リンクされたリストを使用して要素の順序を維持します。要素は挿入順に保存されているようです。独自のクラスを生成する場合、Set は要素の格納順序を維持する必要があるため、Comparable インターフェイスを実装し、compareTo() メソッドを定義する必要があることに注意してください。
上記は、List と Set という 2 つの特別な Java コンテナ クラスの分析です。その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。