ホームページ  >  記事  >  Java  >  コレクション

コレクション

WBOY
WBOYオリジナル
2024-07-17 08:51:37470ブラウズ

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

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

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

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

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

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

Image description

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

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

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

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<String> 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<String> 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<String> c1 = (ArrayList<String>)(collection1.clone());
        c1.addAll(collection2);
        System.out.println("\nCities in collection1 or collection2: ");
        System.out.println(c1);

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

        c1 = (ArrayList<String>)(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 のすべてのインスタンスをシリアル化できます。

以上がコレクションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。