Java コレクションと配列総合

<h1>・配列とは</h1>
<b>配列</b>とは、同じ種類のデータを入れられる(StringならStringだけ、intならintだけが入るという)<b>データ構造</b>です。
特徴としては、
<ul>
 <li>同じデータ型しか入らない</li>
 <li>データの長さは固定(事前に決めなければならない)</li>
 <li>インデックス（番号）でアクセスできる</li>
</ul>

<h5>宣言の仕方</h5>

```Java:配列の宣言
    //1次元配列
    int[] intArray = new int[配列の数];
    //2次元配列
    String[][] strArray = new String[配列の数][配列の数];
```

<h5>要素の追加</h5>

```Java:配列：要素の追加
    //配列の1番目に3を入れる
    intArray[0] = 3;
    intArray[1] = 2;
    intArray[2] = 5;
    intArray[3] = 12;
    intArray[4] = 200;
    //2次元配列
    strArray[0][1] = "小泉佳穂";
    strArray[1][0] = "豆山虎太郎";
    //省略
```

<h5>要素の削除</h5>

```Java:配列：要素の削除
    //nullで削除
    strArray[1][0] = null;
    //上書きする
    strArray[1][0] = "鳥海晃司";
```

<h5>全要素の出力</h5>

```Java:配列：全要素の出力
    //1次元配列の出力
    System.out.println(Arrays.toString(intArray));
    /*結果=>[3, 2, 5, 12, 200]*/

    //1次元配列の要素を1つずつ出力する
    for(int index : intArray) {
    System.out.println(index);
    }
    /*
    1次元配列の要素：3
    1次元配列の要素：2
    1次元配列の要素：5
    1次元配列の要素：12
    1次元配列の要素：200
    */
    //2次元配列の出力
    System.out.println(Arrays.deepToString(strArray));
    /*2次元配列の出力
    [[岩尾憲, 伊藤敦樹, 小泉佳穂], 
    [鳥海晃司, 為田大貴, レオセアラ], 
    [水沼宏太, 喜田拓也, 西村拓真]]*/

    //2次元配列の要素を1つずつ出力する
    //for文
    for (int i = 0; i < strArray.length; i++) {
         for (int j = 0; j < strArray.length; j++) {
                System.out.println(strArray[i][j]);
         }
    }

    //拡張for文
    for(String[] words : strArray) {
        for(String word : words) {
            System.out.println(word);
        }
    }
    /*どちらの結果も=>
    岩尾憲
    伊藤敦樹
    小泉佳穂
    鳥海晃司
    為田大貴
    レオセアラ
    ~省略~
    */
    
```

<h5>特定の要素の取り出し（ランダムアクセス）</h5>

```Java:配列：特定の要素の出力
    //1次元配列のランダムアクセス
    System.out.println(intArray[1]);
    /*結果=>2*/
    //2次元配列のランダムアクセス
    System.out.println(strArray[1][0]);
    /*結果=>鳥海晃司*/
```

<h1>・コレクションの種類</h1>
Javaの代表的なコレクションには「<b>List</b>」、「<b>Set</b>」、「<b>Map</b>」の３種類あります。

<h2>・Listとは</h2>
　Listとは要素を<b>順番通り</b>に入り、さらにデータの長さが<b>動的</b>、長さが固定されていないデータ構造です。代表的なListには<b>ArrayList</b>と<b>LinkedList</b>の２種類あります。

<h4>・ArrayListとは</h4>
　ArrayListとは要素の追加と削除を高速ですることができ、さらに配列と同じく<b>インデックス</b>によって要素にアクセスするためランダムアクセスを得意としています。デメリットとしては<b>メモリの消費量が多い</b>ことです。

<h5>・宣言の仕方</h5>

```Java:ArrayListの宣言
    /*String型のデータ構造の宣言*/
    //方法1
    List<String> strList = new ArrayList<>();
    //方法2
    var varStrList = new ArrayList<>();
    //方法3
    ArrayList<String> strArrayList = new ArrayList<>();
```

このように3種類の宣言方法があります。

<h5>・要素の追加</h5>

```Java:要素の追加
    //追加(最後尾に追加される)
    strList.add("如月");
    //指定した場所に追加
    strList.add(0, "睦月");
```

<h5>・要素の削除</h5>

```Java:ArrayList：要素の削除
    //同じ要素を削除
    strList.remove("睦月");
    /*同じ名前の要素がある場合は
    一番頭にあるだけが削除される*/

    //同じ名前の要素を全削除
    //消しない要素のListを作る
    List<String> delete = new ArrayList<>();
    Collections.addAll(delete, "睦月");
    strList.removeAll(delete);
    //結果=>「睦月」という要素は全て削除される

    //範囲指定して削除する
    //要素の2番目と3番目を削除する
    strList.subList(1, 3).clear();

    //要素の全削除(List内の要素が消されるだけ)
    strList.clear();
```

<h5>・全要素の出力</h5>

```Java:ArrayList:全要素出力
    //全要素の出力
    System.out.pritnln(strList);
    //結果->[睦月, 如月]

    //要素を１つずつ出力する
    for(String str : strList) {
        System.out.println(str);
    }
    /*結果=>
    睦月
    如月
    */
```

<h5>・特定の要素の取り出し（ランダムアクセス）</h5>

```Java:ArrayList:ランダムアクセス
    //インデックスを使用したアクセス
    System.out.println(strList.get(0));
    /*結果=> 睦月 */

    //範囲を指定したアクセス
    System.out.println(strList.subList(0, 2));
    /*結果=> [睦月, 如月]*/

    //indexOfを使用したアクセス
    System.out.println(strList.indexOf("如月");
    /*結果=>1 如月がどこにあるかをインデックス番号で教えてくれる。　ない場合は-1と出力*/
    System.out.println(strList.get(strList.indexOf("如月");
    /*結果=>如月 */
    System.out.println(strList.get(strList.indexOf("たぬき");
    /*結果=>エラーのIndexOutOfBoundsExceptionがでる*/
    
```


<h4>・LinkedListとは</h4>
　LinkedListとは、要素が前の要素と次の要素の情報を持っており、要素の追加と削除をArrayListよりも速く行うことができます。メソッドの多くはArrayListと変わりません。

<h5>宣言の仕方</h5>

```Java:LinkedListの宣言
    LinkedList<String> strLinkedList = new LinkedList<>();
```

<h2>・Mapとは</h2>
　Mapとは指定したキーと値を持たせることができます。Listや配列だと<b>インデックス</b>という数字をキーを値を対応させていますが、このMapではキーを自分で決められます。
<h5>宣言の仕方</h5>

```Java:Mapの宣言
    //Map<キーの型,値の型> map = new HashMap<>();
    Map<String,String> strMap = new HashMap<>();
```
<h5>要素の追加</h5>

```Java:Map:要素の追加
    //map.put(キー, 値);
    map.put("柏レイソル", "細谷真大");
    map.put("名古屋グランパス", "キャスパー・ユンカー");
    //柏レイソルの値が細谷真大からマテウス・サヴィオに上書きされる
    map.put("柏レイソル", "マテウス・サヴイオ");
```

<h5>要素の削除</h5>

```Java:HashMap：要素の削除
    //map.remove(キー)
    map.remove("名古屋グランパス");
    //結果⇒名古屋グランパス, キャスパー・ユンカーのマッピングが削除される
```

<h5>全要素の取り出し</h5>

```Java:Mapの取り出し
    System.out.println(map);
    //結果⇒{柏レイソル=マテウス・サヴイオ, 名古屋グランパス=キャスパー・ユンカー}
```