今回は「Setの使い方」について解説しますよー。
Setの特徴
Setの特徴は以下の2つですね。
- 順序がない
- 値の重複がNG
ちなみに、そもそもSetやListの概念がよくわかってないという方はこちらの解説をのぞいてみてください。
Setの使い方
Setの使い方を以下の2ステップで解説します。
1. Setを宣言しよう
Setはデータ型を<>で囲って宣言します。
//Setの宣言
Set<String> strSet = new Set<String>();
Listと同じですね。
2. Setに値を入れよう
さて、値の入れ方ですが、こちらもListで使用されているようなやり方ですね。
ここでは以下の2つの方法を使ってSetに要素を追加していきます。
- addメソッドを使用
- 宣言時に追加
/**********
**①addメソッドを使用して追加
**********/
Set<String> fruitSet1 = new Set<String>();
//要素を追加
fruitSet1.add('リンゴ');
fruitSet1.add('ミカン');
fruitSet1.add('リンゴ');
fruitSet1.add('モモ');
fruitSet1.add('ブドウ');
//Setの中身の確認
system.debug('fruitSet1の中身:' + fruitSet1);
/**********
**③宣言時に要素を追加
**********/
Set<String> fruitSet2 = new Set<String>{'リンゴ', 'ミカン', 'リンゴ', 'モモ', 'ブドウ'};
//リストの中身の確認
system.debug('fruitSet2の中身:' + fruitSet2);
上のコードでは、「fruitSet1」と「fruitSet2」というSetにそれぞれフルーツ要素を格納しています。
2つのSetの中身を確認すると、
どちらのSetにも「リンゴ」を2つ入れたはずなのに、1つしか入っていませんね。
また、「リンゴ」→「ミカン」の順番で要素を入れたにもかかわらず、「ブドウ」が先頭に来ています。
このように、SetではListで可能だった重複値の格納ができません
また、Listとは違い順番をもたないため、index(場所番号)を指定して要素を格納や取得することもできません。
要素に順番がなく、重複の値はNG。これがSetです。
Setのメソッド
以下、Setで使用可能なメソッドです。
それぞれの使い方は公式レファレンスをのぞいてみてください。
>> Setのメソッド【公式】
No | メソッド | 説明 |
---|---|---|
1 | add(setElement) | 要素がセットに追加されていない場合は、追加する。 |
2 | addAll(fromList) | 指定されたリストのすべての要素がセットに追加されていない場合は、追加する。 |
3 | addAll(fromSet) | 指定されたセットのすべての要素が、メソッドをコールするセットに追加されていない場合は、追加する。 |
4 | clear() | セットからすべての要素を削除する。 |
5 | clone() | セットの重複コピーを作成する。 |
6 | contains(setElement) | セットに指定した要素が存在する場合、true を返す。 |
7 | containsAll(listToCompare) | セットに指定したリストのすべての要素がある場合、true を返す。リストは、メソッドをコールするセットと同じデータ型である必要がある。 |
8 | containsAll(setToCompare) | セットに指定したセットのすべての要素が含まれる場合、true を返す。指定されたセットは、メソッドをコールする元のセットと同じデータ型である必要がある。 |
9 | equals(set2) | このセットと指定されたセットを比較し、両方のセットが等しい場合は true を返し、そうでない場合は false を返す。 |
10 | hashCode() | このセットおよびコンテンツに対応する hashcode を返す。 |
11 | isEmpty() | セットの要素が 0 の場合、true を返す。 |
12 | remove(setElement) | 指定した要素がセットにある場合は、セットから削除する。 |
13 | removeAll(listOfElementsToRemove) | 指定したリストの要素がセットにある場合は、セットから削除する。 |
14 | removeAll(setOfElementsToRemove) | 指定したセットの要素が元のセットにある場合は、削除する。 |
15 | retainAll(listOfElementsToRetain) | 指定したリストに含まれるこのセットの要素のみを保持する。 |
16 | retainAll(setOfElementsToRetain) | 指定したセットに含まれる元のセットの要素のみを保持する。 |
17 | size() | セットの要素の数 (基数) を返す。 |
18 | toString() | 設定済みの文字列表現を返す。 |
まとめ
今回は「Setの使い方」について解説しました。
最初のうちはSetの使いどころが分からないかもしれませんね。
そんな時は次の問いに答えるようにします。
- 値の重複があってもよいか?
- 値の順序は重要か?
いずれかの答えが「Yes」の場合はListを使用します。
どちらも「No」の場合は、Setを使用しましょう。
コメント