「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > コレクション

コレクション

2024 年 8 月 10 日に公開
ブラウズ:894

Collection インターフェイスは、リスト、ベクトル、スタック、キュー、優先キュー、セットの共通操作を定義します。

Java Collections Framework は 2 種類のコンテナをサポートします:

  • 要素のコレクションを格納するものは、単に コレクションと呼ばれます。
  • もう 1 つは、キーと値のペアを保存するためのもので、マップ.
  • と呼ばれます。

マップは、キーを使用して要素を迅速に検索するための効率的なデータ構造です。以下のコレクションをご紹介します。

  • Set は、重複しない要素のグループを保存します。
  • List は、順序付けられた要素のコレクションを保存します。
  • スタックには、後入れ先出し方式で処理されるオブジェクトが格納されます。
  • キューには、先入れ先出し方式で処理されるオブジェクトが格納されます。
  • PriorityQueue には、優先順位に従って処理されるオブジェクトが格納されます。

以下の図に示すように、これらのコレクションの共通機能はインターフェイスで定義され、実装は具象クラスで提供されます。

Image description

Java Collections Framework で定義されているすべてのインターフェイスとクラスは、java.util パッケージにグループ化されています。

Java Collections Framework の設計は、インターフェイス、抽象クラス、具象クラスの使用の優れた例です。インターフェイスはフレームワークを定義します。抽象クラスは部分的な実装を提供します。具象クラスは、具象データ構造を使用してインターフェイスを実装します。インターフェースを部分的に実装する抽象クラスを提供すると、ユーザーがコードを記述しやすくなります。ユーザーは、インターフェイス内のすべてのメソッドを実装するのではなく、抽象クラスを拡張する具象クラスを簡単に定義できます。 AbstractCollection などの抽象クラスは便宜のために提供されています。このため、これらは便宜抽象クラスと呼ばれます。

Collection インターフェイスは、オブジェクトのコレクションを操作するためのルート インターフェイスです。そのパブリック メソッドを次の図に示します。 AbstractCollection クラスは、Collection インターフェイスの部分的な実装を提供します。 addsize、および iterator メソッドを除く、Collection 内のすべてのメソッドを実装します。これらは、適切な具象サブクラスで実装されます。

Image description

Collection インターフェイスは、コレクション内の要素を追加および削除するための基本的な操作を提供します。 add メソッドは、コレクションに要素を追加します。 addAll メソッドは、指定されたコレクション内のすべての要素をこのコレクションに追加します。 remove メソッドは、コレクションから要素を削除します。 removeAll メソッドは、指定されたコレクションに存在する要素をこのコレクションから削除します。 retainAll メソッドは、指定されたコレクションにも存在するこのコレクション内の要素を保持します。これらのメソッドはすべて boolean を返します。メソッド実行の結果としてコレクションが変更された場合、戻り値は true です。 clear() メソッドは、コレクションからすべての要素を単純に削除します。

メソッド addAllremoveAll、および retainAll は、和集合、差分集合、積集合演算に似ています。

Collection インターフェイスは、さまざまなクエリ操作を提供します。 size メソッドは、コレクション内の要素の数を返します。 contains メソッドは、コレクションに指定された要素が含まれているかどうかを確認します。 containsAll メソッドは、指定されたコレクション内のすべての要素がコレクションに含まれているかどうかを確認します。 isEmpty メソッドは、コレクションが空の場合、true を返します。

Collection インターフェイスは、コレクションの配列表現を返す toArray() メソッドを提供します。

Collection インターフェイスの一部のメソッドは、具象サブクラスに実装できません。この場合、メソッドは RuntimeException のサブクラスである java.lang.UnsupportedOperationException をスローします。これはプロジェクトで使用できる優れたデザインです。メソッドがサブクラス内で意味を持たない場合は、次のように実装できます:

public void someMethod() {
新しい UnsupportedOperationException
をスローします ("サポートされていないメソッド");
}

以下のコードは、Collection インターフェイスで定義されたメソッドを使用する例を示します。

package demo;
import java.util.*;

public class TestCollection {

    public static void main(String[] args) {
        ArrayList collection1 = new ArrayList();
        collection1.add("New York");
        collection1.add("Atlanta");
        collection1.add("Dallas");
        collection1.add("Madison");

        System.out.println("A list of cities in collection1:");
        System.out.println(collection1);

        System.out.println("\nIs Dallas in collection1? "   collection1.contains("Dallas"));

        collection1.remove("Dallas");
        System.out.println("\n"   collection1.size()   " cities are in collection1 now");

        Collection collection2 = new ArrayList();
        collection2.add("Seattle");
        collection2.add("Portland");
        collection2.add("Los Angeles");
        collection2.add("Atlanta");

        System.out.println("\nA list of cities in collection2:");
        System.out.println(collection2);

        ArrayList c1 = (ArrayList)(collection1.clone());
        c1.addAll(collection2);
        System.out.println("\nCities in collection1 or collection2: ");
        System.out.println(c1);

        c1 = (ArrayList)(collection1.clone());
        c1.retainAll(collection2);
        System.out.print("\nCities in collection1 and collection2: ");
        System.out.println(c1);

        c1 = (ArrayList)(collection1.clone());
        c1.removeAll(collection2);
        System.out.print("\nCities in collection1, but not in 2: ");
        System.out.println(c1);
    }

}

コレクション内の都市のリスト1:
[ニューヨーク、アトランタ、ダラス、マディソン]
ダラスはコレクション 1 にありますか?真実
現在 3 つの都市がコレクション1に含まれています
コレクション 2 内の都市のリスト:
[シアトル、ポートランド、ロサンゼルス、アトランタ]
コレクション 1 またはコレクション 2 の都市:
[ニューヨーク、アトランタ、マディソン、シアトル、ポートランド、ロサンゼルス、アトランタ]
コレクション 1 とコレクション 2 の都市: [アトランタ]
コレクション 1 には含まれるが、2 には含まれない都市: [ニューヨーク、マディソン]

プログラムは、ArrayList (7 行目) を使用して具体的なコレクション オブジェクトを作成し、Collection インターフェイスの contains メソッド (16 行目) を呼び出します。 Remove メソッド (18 行目)、size メソッド (19 行目)、addAll メソッド (31 行目)、retainAll メソッド (36 行目)、 removeAll メソッド (41 行目).

この例では、

ArrayListを使用します。 HashSetLinkedListVectorStack などの Collection の具体的なクラスを使用して置き換えることができます。 ArrayList は、Collection インターフェイスで定義されているメソッドをテストします。

プログラムは配列リストのコピーを作成します (行 30、35、40)。この目的は、元の配列リストをそのまま保持し、そのコピーを使用して

addAllretainAll、および removeAll の操作を実行することです。

Java Collections Framework のすべての具象クラスは、

java.util.PriorityQueuejava.lang.Cloneable および java.io.Serializable インターフェイスを実装します。 ] は、Cloneable インターフェイスを実装していません。したがって、優先キューを除く Cloneable のすべてのインスタンスを複製でき、Cloneable のすべてのインスタンスをシリアル化できます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/paulike/collections-3le7?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3