Java/基礎/コレクション
コレクション
[編集]プログラミングにおけるコレクション(Collection)は、複数の要素をまとめて管理するためのデータ構造です。コレクションは、配列やリスト、セット、マップなど、さまざまな形式で提供されます。これらのデータ構造は、異なる目的や要件に応じて使われ、データの格納、検索、操作、管理を行うための便利な手段として利用されます。
コレクションの主な特徴は以下の通りです:
- 動的サイズ: コレクションは通常、要素の追加や削除などの操作によって動的にサイズが変化します。配列のように固定サイズではなく、必要に応じて要素を増減させることができます。
- ジェネリック: 多くの場合、コレクションはジェネリック型をサポートしており、異なるデータ型の要素を格納することができます。これにより、汎用的なコレクションを作成し、様々な種類のデータを扱うことが可能になります。
- 高度な操作: コレクションは、要素の追加、削除、検索、ソート、フィルタリングなど、さまざまな操作をサポートします。これにより、効率的なデータの管理や処理が可能になります。
- 相互変換: コレクション間でデータを相互変換することができる場合があります。たとえば、配列をリストに変換したり、リストをセットに変換したりすることができます。
プログラミングにおけるコレクションは、さまざまな用途に活用されます。例えば、データの一時的な保存や処理、データの集計や集合演算、データの操作や変換など、さまざまな場面で利用されます。多くのプログラミング言語やフレームワークは、標準ライブラリやサードパーティライブラリを通じてさまざまなコレクションを提供しています。
Javaのコレクション
[編集]Javaのコレクションは、複数の要素を格納し、効率的なデータ操作を可能にするためのフレームワークです。Javaのコレクションフレームワークは、java.util
パッケージに含まれており、さまざまなインターフェースとそれらを実装するクラスが提供されています。主なコレクションインターフェースには、リスト、セット、マップなどがあります。
以下は、Javaのコレクションフレームワークを使った例を1つのソースコードにまとめたものです。
import java.util.ArrayList; import java.util.HashSet; import java.util.HashMap; import java.util.LinkedList; import java.util.ArrayDeque; public class CollectionQuickTour { public static void main(String[] args) { // リストの例 var myList = new ArrayList<String>(); myList.add("Apple"); myList.add("Banana"); myList.add("Cherry"); System.out.print("List: " + myList); System.out.println("; The type of myList is: " + myList.getClass().getName()); // セットの例 var mySet = new HashSet<Integer>(); mySet.add(1); mySet.add(2); mySet.add(3); mySet.add(1); // 重複した要素は無視される System.out.print("Set: " + mySet); System.out.println("; The type of mySet is: " + mySet.getClass().getName()); // マップの例 var myMap = new HashMap<String, Integer>(); myMap.put("One", 1); myMap.put("Two", 2); myMap.put("Three", 3); System.out.print("Map: " + myMap); System.out.println("; The type of mySet is: " + myMap.getClass().getName()); // キューの例 var myQueue = new LinkedList<String>(); myQueue.add("First"); myQueue.add("Second"); myQueue.add("Third"); System.out.print("Queue: " + myQueue); System.out.println("; The type of myQueue is: " + myQueue.getClass().getName()); // デッキの例 var myDeque = new ArrayDeque<Integer>(); myDeque.addFirst(1); myDeque.addLast(2); myDeque.addLast(3); System.out.print("Deque: " + myDeque); System.out.println("; The type of myDeque is: " + myDeque.getClass().getName()); } }
このコードでは、リスト、セット、マップ、キュー、デッキのそれぞれのコレクションを作成し、要素を追加しています。それぞれのコレクションの要素が出力されます。これにより、Javaのコレクションフレームワークの基本的な使い方を示しています。
以下は、Javaのコレクションフレームワークに含まれる主要なクラスとインターフェースの一覧を、名前、クラス・インターフェースの別、説明の順に表組みで示したものです。
コレクションフレームワークに含まれる主要なクラスとインターフェース一覧 名前 クラス・インターフェースの別 説明 Collection インターフェース オブジェクトのコレクションを表します。リスト、セット、キューなどの基本的な操作を提供します。 List インターフェース 順序付きの要素のコレクションを表します。要素の重複を許します。 Set インターフェース 重複を許さない要素のコレクションを表します。 Map インターフェース キーと値のペアのコレクションを表します。キーは一意であり、各キーには1つの値が関連付けられます。 Queue インターフェース FIFO (First-In-First-Out) データ構造を表します。要素の挿入はキューの末尾に行われ、削除はキューの先頭から行われます。 Deque インターフェース 双方向キュー (Double Ended Queue) データ構造を表します。要素の挿入と削除がキューの両端で行われます。 ArrayList クラス 動的配列を実装したリストです。 LinkedList クラス リンクリストを実装したリストです。 HashSet クラス ハッシュテーブルを使用して実装されたセットです。 TreeSet クラス 赤黒木を使用して実装されたセットです。要素は自然順序またはコンパレータによってソートされます。 LinkedHashSet クラス ハッシュテーブルとリンクリストを組み合わせて実装されたセットです。要素の挿入順序を保持します。 HashMap クラス ハッシュテーブルを使用して実装されたマップです。 TreeMap クラス 赤黒木を使用して実装されたマップです。キーは自然順序またはコンパレータによってソートされます。 LinkedHashMap クラス ハッシュテーブルと双方向リンクリストを組み合わせて実装されたマップです。要素の挿入順序を保持します。
これらのクラスとインターフェースは、Javaのコレクションフレームワークを構成し、さまざまなデータ構造を効率的に操作するための手段を提供します。
コレクションフレームワーク
[編集]Javaのコレクションフレームワークは、データを効率的に管理し、操作するための標準的なAPIセットです。これにより、プログラマーはリスト、セット、マップなどのさまざまなデータ構造を使用してデータを格納し、操作することができます。Javaのコレクションフレームワークは、java.util
パッケージに含まれており、多くのインターフェースとクラスから構成されています。
コレクションフレームワークの主な特徴は次のとおりです:
- 柔軟性: コレクションフレームワークは、異なる種類のデータ構造を提供し、プログラマーがプログラムの要件に応じて適切なデータ構造を選択できるようにします。
- 再利用性: 既存のコレクションクラスやインターフェースを使用することで、プログラマーは再利用可能なコードを作成しやすくなります。
- 拡張性: コレクションフレームワークは、カスタムコレクションの作成や既存のコレクションの拡張を容易にします。プログラマーは独自のデータ構造を定義し、それをコレクションとして使用することができます。
- 効率性: コレクションフレームワークは、データの効率的な格納、検索、操作を実現するために最適化されています。さまざまなデータ構造は、特定の操作に対して最適な性能を提供します。
- 型安全性: ジェネリクスを使用することで、コンパイル時の型安全性が向上します。これにより、コンパイル時に型エラーを検出しやすくなります。
コレクションフレームワークは、Javaプログラミングにおいて非常に重要であり、さまざまなアプリケーションやライブラリで広く使用されています。プログラマーは、これらのAPIを十分に理解し、適切に活用することで、効率的で堅牢なコードを作成することができます。