List、Map、Setを使用して複数の値を保持してみよう!【プログラミング】

お久しぶりです!はっしーです!
最近になって食事制限と筋トレというダイエットを始めたのですが、何故か体重が増えてしまうという状態に陥っております(笑)
でも、お腹周りは細くなりましたよ!(笑)

さて、今回は複数の値を保持してみようということで、List、Map、Setについてそれぞれの違いを書いていきたいと思います。

List、Map、Setは複数の情報を保持できるという共通点がありますが、それぞれには以下の違いがあります。

List 重複した値のセット(add)が可能です。
Map キーによって値を管理しているため、キーの重複は不可です。但し、値の重複は可能です。
※同じキーがセット(put)された場合は、上書きされます。
Set 重複した値のセット(add)は不可です。
※同じ値がセット(add)された場合は、上書きされます。

 

言葉で説明してみましたが、なかなか難しいですし、本当はもっといろいろあります・・・。
それにイメージが思い浮かばない方もいるかと思いますので、List、Map、Setについて、実際にサンプルソースとして書いてみたいと思います。

※サンプルソースはsalesforceのApexをベースとしています。

まずは各種の型に値をセットする方法です。

//List
List<String> ListA = new List<String>();
//値をセット
ListA.add('あいうえお');
ListA.add('かきくけこ');
ListA.add('さしすせそ');
ListA.add('あいうえお');

//Map
Map<String,String> mapB = new Map<String,String>();
//値をセット
mapB.put('1','あいうえお');
mapB.put('2','かきくけこ');
mapB.put('3','さしすせそ');
mapB.put('2','あいうえお');

//Set
Set<String> setC = new Set<String>();
//値をセット
setC.add('あいうえお');
setC.add('かきくけこ');
setC.add('さしすせそ');
setC.add('あいうえお');

例を見てみると、ListとSetの値をセットする方法は同じですが、Mapはキーを設定しなくてはならないため記述が異なります。

 

それでは、それぞれにセットした値の数を確認してみます。

system.debug(ListA.size() + 'ListA.size()の結果は4となる');
system.debug(mapB.size() + 'mapB.size()の結果は3となる');
system.debug(setC.size() + 'setC.size()の結果は3となる');

結果を見てみると、それぞれにデータを4つずつセットしたにも関わらず、MapとSetの結果は3つとなりました。
これは、MapとSetが『重複値のない単一の情報』を保持するためです。
Mapに関しては【2】のキーが複数セットされてましたが単一化されてます。
Setに関しては【あいうえお】が複数セットされてましたが単一化されてます。

 

説明してみましたが、実際に見てもらったほうが早いと思いますので、それぞれの値を順番に取得してみて、保持された値がどのようになっているか確認してみましょう!

//ListAの値を取得(Listをループ)
for(String A: ListA) {
    System.debug(A + '4回ループし、Aは順に「あいうえお」、「かきくけこ」、「さしすせそ」、「あいうえお」となる');
}


//mapBの値を取得(キーをループ)
for(String B : mapB.keySet()) {
    System.debug(mapB.get(B) + '3回ループし、キーと値は「キー【1】→あいうえお」、「キー【2】→あいうえお」、「キー【3】→さしすせそ」となる');
}


//setCの値を取得(Setをループ)
for(String C: setC) {
    System.debug(C + '3回ループし、Cは「あいうえお」、「かきくけこ」、「さしすせそ」となる');
}

以上の結果のように、同じように値を複数個セットしてみましたが、List、Map、Setそれぞれで保持した値の結果は変わりました。
値を複数個保持するということは同じですが、必要な状況に応じて使い分けることで効率よくコーディングすることができるので是非参考にしてみてください!

ということで

それでは!