序章

ほぼすべてのプログラムは、何らかのデータセットを保存する必要があります。文字列や数値、オブジェクトなどが考えられます。アレイは優れたストレージ ソリューションです。ただし、配列には特定の制限があります。たとえば、サイズは固定されており、要素は削除できず、要素を途中に挿入することもできません。コレクションは、これらおよびその他の制限を回避するために作成されました。すべての種類のコレクション (このレッスンで後ほど説明するように、コレクションはたくさんあります) には、動的にサイズを変更する機能があります。一部のコレクション タイプでは、順序付けされた要素を格納し、新しい要素が追加されると自動的にその順序に配置されます。

このレッスンでは、 Java Collections Frameworkの基本コレクションのクラス階層について学びます。標準のJava Collections Frameworkの機能を拡張するさまざまな代替ライブラリもあります。これらの中で最も人気のあるのはGuava (Google Collections Library) です。

*すべてのインターフェイスとクラスが図に示されているわけではありません。分かりやすくするために一部省略させていただきました。

基本的なインターフェース

この図は、残りのクラスとインターフェイスを形成するために実装される 2 つの基本インターフェイスがあることを示しています。

これらのインターフェイスを見てみましょう。

  1. コレクション— 要素 (オブジェクト) のセットを含む通常のコレクション。このコレクションには、要素を操作するための基本的なメソッドがあります。挿入 ( add addAll )、削除 ( remove removeAll clear )、検索 ( contains containsAll )、コレクションが空かどうかの確認 ( isEmpty )、サイズの取得 ( size ) です。

  2. マップ— キーと値のペアとして構造化されたコレクション。さらに、 Map内の各キーは一意であり、同じ値を持つ 2 つのキーはありません。このコレクションは、辞書と呼ばれることもあります。マップは別のインターフェイスです。Collectionインターフェースは実装されていませんが、 Java Collections Frameworkの一部です。

Map内の要素を操作するための便利なメソッド:

  • 挿入 ( putputAll )

  • get ( getkeySetvaluesentrySet )

  • 削除 (削除クリア)

  • 検索 ( containsKeycontainsValue )

  • コレクションが空かどうかを確認します ( isEmpty )

  • サイズを取得 (サイズ)

それぞれについて詳しく説明しましょう。

コレクションインターフェース

Collectionインターフェイス、単一メソッドiterator()を持つIterableインターフェイスを拡張します。私たちにとって、これは、 Iterableを継承するコレクションがイテレータを返すことができることを意味します。

イテレータはその特定の実装に関係なく、任意のコレクションの要素にアクセスするために使用できる特別なオブジェクトです。

この図は、 ListQueueSetの 3 つのインターフェイスがCollectionインターフェイスを継承していることを示しています。ここで、それぞれを簡単に見ていきます。

リストは、重複した値を許可する順序付けられたコレクションです。リストの特別な機能は、その要素に番号が付けられ、番号 (インデックス) によってアクセスできることです。

キューは、要素がキューに追加された順序で格納されます。

リストとは異なり、Set は要素の繰り返しを許可しない、順序付けされていないコレクションを表します。Setインターフェイス、数学的な集合の概念に対応します。

Map インターフェースの実装

Mapインターフェイスが一意のキーと値の間のマッピングを表していることがわかります。


interface Map<K, V>

ここで、Kはキーのタイプ、Vは格納された値のタイプです。

キーを使用して、Mapからデータを抽出できます。Mapに要素を追加するには、キーと値を指定する必要があります。

Mapの実装をいくつか見てみましょう。

  1. HashMap は、ハッシュ テーブルに基づくMapの実装ですnullを含むあらゆるタイプのキーと値を格納できます。要素の順序は保証されません。

  2. LinkedHashMap は、要素のリンクされたリストとしてデータを保存するデータ構造です。要素は追加された順序でリストに表示されます。

  3. TreeMap は、SortedMapインターフェイスを ( NavigableMapインターフェイス経由で)実装します。この構造内の要素は、ソートされた順序で保存されます (新しい要素が追加されると、コレクションは自動的にソートされます)。TreeMap は、大量の並べ替えられたデータを保存し、高速に取得するのに最適です。

古いコレクション:

Java には、(下位互換性を維持するため) 以前のバージョンからの廃止されたコレクションがあります。これらの古いコレクションは、新しいコードでは使用しないでください。

  • Enumeration Iteratorインターフェイスに似ています。

  • Vector — 要素の順序付きリストであり、 ArrayListクラスに似ています。

  • Stack — スタック データ構造の実装。書籍のスタックを操作する場合と同様に、要素を保存および操作します。要素をスタックに追加する ( push ) メソッドと要素を削除する ( pop ) メソッドがあります。

  • Dictionary Mapインターフェイスに似ていますが、抽象クラスです。

  • Hashtable HashMapに似ています。

コレクション フレームワークの詳細については、この記事を参照してください。