1. コンテナとコレクション

コンテナまたはコレクションは、複数のオブジェクトを一度に保存および処理できるクラスです。配列とリストという 2 種類のコンテナーについてはすでにご存知でしょう。

Java には数十のコレクションがあり、それぞれが独自の方法で要素を格納します。そのうちのいくつかを次に示します。

コレクション クラス 説明
List
ArrayList
リスト
LinkedList
リンクされたリスト
Vector
ベクター
Stack
スタック
Set
HashSet
設定
TreeSet
LinkedHashSet
Queue
PriorityQueue
ArrayQueue
Map
HashMap
地図・辞書
TreeMap
HashTable

ここでの名前はやや曖昧です。ほとんどのプログラミング言語では、これらのデータ構造はすべてコレクションと呼ばれますが、Java では異なります。Java では、これらのクラスの一部はCollectionインターフェイスを実装しますが、その他のクラスはインターフェイスを実装しません。

したがって、コレクションは広義のコレクションと狭義のコレクション(インターフェースを実装したもののみCollection)に分けられます。

したがって、混乱を避けるために、コレクションについて話すときは、狭い意味での、つまりCollectionインターフェイスを実装するクラスを意味します。、ListSetQueue型はすべてコレクションです。広い意味でのコレクションを一般にコンテナと呼びます。これらには、 や 配列などの型が含まれますMap


2.HashSetコレクション

このHashSetクラスは典型的なセット コレクションです。多くの点で、それはArrayListクラスに似ています。ある意味、これはより原始的なバージョンです。

HashSet次のようなステートメントを使用してオブジェクトを作成できます。

HashSet<Type> name = new HashSet<Type>();

ここで、Typeはコレクションに保存する要素のタイプですHashSet

クラスHashSetには次のようなメソッドがあります。

方法 説明
void add(Type value)
value要素をコレクションに追加します
boolean remove(Type value)
valueコレクションから要素を削除します。そのような要素があった場合に
返しますtrue
boolean contains(Type value)
コレクションにvalue要素があるかどうかを確認します
void clear()
コレクションをクリアし、すべての要素を削除します
int size()
コレクション内の要素の数を返します。

セットの使用例をご紹介します。

ユーザーがこんにちはと言ったら、別れを告げるプログラムを書いてみましょう。もっと面白くするために、プログラムにいくつかの言語で「こんにちは」を理解できる機能を与えます。

コード ノート
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
HashSet要素を格納するオブジェクトを作成しますString


さまざまな言語の挨拶をset変数に追加します。




コンソールから 1 行を読み取ります。


この文字列が一連の挨拶に含まれている場合は、さよならを言います。


3.セット

コレクションSetは、一連の要素を保持するように設計されています。それがSet(セット)と呼ばれる理由です。このコレクションには3つの特徴があります。

セットに対する操作

セットに対してできることは 3 つだけです。セットに要素を追加する、セットから要素を削除する、セットに特定の要素が含まれているかどうかを確認するです。それでおしまい。

注文なし

このコレクションの要素にはインデックスがありません。インデックスによって要素を取得したり、特定のインデックスのコレクションに値を書き込んだりすることはできません。セットにはget()andset()メソッドはありません。

ユニークな要素

セット内のすべての要素は一意です。リストとは異なり、セットには要素のインスタンスを 1 つだけ含めることができます。オブジェクトはセット内にあるかどうかのどちらかです。3 番目のオプションはありません。一連の色のセットに黒を 3 回追加することはできません。それはそこにあるか、ないかのどちらかです。

要素の検索

新しい要素を追加したり、要素を削除したり、セット内に要素が存在するかどうかを確認したりする場合、メソッド内で要素の検索が実行されます。渡された要素は、まず によってコレクションの要素と比較され、次にによってhashCode()返された値が一致する場合に によって比較されます。hashCode()equals()



4. コレクションの比較: ListvsSet

2 つのタイプのコレクションを比較してみましょう。List一方Setが他方より有利な場合、またはその逆の場合の主な違いを見ていきます。

おもちゃを例にしてListとSetを比較してみましょう。

List(リスト) コレクションは、遊び場の壁に沿って並べられたおもちゃのセットのようなものです。リストの最後におもちゃを追加できます。どうしても必要な場合は、真ん中に挿入することもできます(ただし、既存のおもちゃの一部は移動する必要があります)。

各おもちゃにはインデックスが付いています。おもちゃをインデックスで参照したり、おもちゃ番号 7 をおもちゃ番号 13 に置き換えたりすることもできます。おもちゃ番号 4 をリストから削除することもできます。最後に、リスト内の各おもちゃのインデックスを知ることができます。

Set(セット) コレクションは、床の真ん中におもちゃの山が置かれているようなものです。おもちゃを山に追加したり、山からおもちゃを削除したりできます。ただし、これらのおもちゃには、関連付けられた固定インデックスがありません。

あるいは、子供の誕生日におもちゃを選んでいるとします。まず、彼がすでにそのおもちゃを持っているかどうかを考えます。彼がすでに持っているすべてのおもちゃは、あなたが購入することを選択しないおもちゃのセットを形成します。

この観点から、「すでに存在するおもちゃ」のセット内のおもちゃの順序は問題ではなく、誕生日の男の子が特定のおもちゃのインスタンスを 2 つ持っているかどうかも問題ではないことがわかります。各おもちゃの順序や数には興味がありません。あなたが気にかけているのは、セット内に存在するそれぞれのユニークなおもちゃを知ることです。

このような場合には、コレクションが必要ですSet。最も一般的な実装はHashSetクラスです。