【わかりやすく解説‼】ArrayListの使い方【Java】

## 1.事前知識
- [【最新】UbuntuでJavaの環境を構築する方法](https://qiita.com/ryome/items/37c53e9638a9c6ea146a)

- [【初心者でもできる‼】Windows10にJava環境を作る方法（JDK14.0.1）](https://qiita.com/ryome/items/30135570954e36196821)

- [【わかりやすく解説‼】Javaのインスタンスの使い方](https://qiita.com/ryome/items/62ba0d8395af6698053a)

- [【初心者でもできる‼】Windows10にEclipseをインストールする方法（Java環境構築）](https://qiita.com/ryome/items/b47c5acdaa52cffbec58)


事前知識として、上記リンクの内容が必要です。


## 2.ArrayListとは

- `ArrayList` とは、 `Listインタフェース` を実装した `コレクションクラス` である。
- `ArrayList` は、 `Array` という名にあるように配列のような感覚で扱うことができる。

### ArrayListと配列の違い
- `配列` には格納できる `要素数が決まっている` が、 `ArrayList` は `要素数は決まっていない` 。
- `ArrayList` は、 `プリミティブ型（int, booleanなど）` を入れられない。

### Listメソッドの使い方

| メソッド                 |    説明                                 |    記述例 　　　　　　　　　　　　　  |
|:------------------------|:------------------------------------------|:----------------------------------|
| `add`                | リストに値を追加する。                  |list.add(要素番号)|
| `addAll`                | リストにリストを追加する。　　　　　　|list1.add(リスト)|
| `set`               | リストの値を変更する。　　　　　　　　  |list.set(要素番号, 代入する値)|
| `get`                | リストの値を取得する。          　　　 |list.get(要素番号)         |
| `size`　              | リストの要素数を取得する。    　　　　　|list.size()           |
| `indexOf`              | リストから値の要素番号を取得する。      |list.indexOf(検索する値)       |
| `subList`  　               | リストから範囲を指定してシャローコピーする。(※元のリストと同じデータを参照している。)|subList(開始要素番号, 終了要素番号)          |
| `contains`                   | リストに値が含まれるか判定する。 　|list.contains(検索する値)              |
| `remove`                 | リストから指定すた要素番号の値を削除する。|list.remove(要素番号)    |
| `distinct`                   | リストの重複する値を削除する。      | list.stream().distinct().collect(Collectors.toList())|
| `clone`                   | リストをコピーする。                     |list.clone()|
| `clear`                   | リストを空にする。                     |list.clear()|

### 主に使用するクラス
```java:import
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
```

## 3.ArrayListの基本的な書き方

```PHP:テストクラス
package パッケージ名;
public class メインクラス名{
    public static void main(String[] args) {
        // ArrayListの作成
        ArrayList<参照型名> 変数名 = new ArrayList<参照型名>();
    }
}
```

- 基本的な `ArrayList` は上記のように記述します。

## 4.事前準備
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/866ce029-9f28-05d3-ab0b-5e7b0467aafa.png)
1. Eclipseを起動し、 `[ファイル(F)]→[新規(N)]→[Java プロジェクト]` を選択する。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/f1c5cc3c-449f-a66a-caef-d5f681054041.png)
2. プロジェクト名に `Test1` と入力し、 `完了` ボタンをクリックする。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/a98626bb-291e-6aa8-5d69-df243d1673ca.png)
3. `[ファイル(F)]→[新規(N)]→[クラス]` を選択する。　　　
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/d0382456-4dd1-7474-4fbf-79735739b62c.png)
4. パッケージと名前に `Test1` と入力し、 `完了` ボタンをクリックする。
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/deff58a6-dfe5-ec36-8a1c-e0d7d7c9833b.png)
5. `Test1.java` が作成されたことを確認する。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/00e327b1-8a43-20e1-5354-445328cd3870.png)
6. 3と同様の手順でパッケージに `Test1` 、名前に `Hello` と入力し、 `完了` ボタンをクリックする。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/d81125c6-e164-4a61-0fe4-765f0c087c47.png)
7. `Test1.java` , `Hello.java` が作成されれば成功。

## 5.記述例

```java:Test1.java
package Test1;
import java.util.ArrayList;
import java.util.stream.Collectors;

public class Test1 {
    public static void main(String[] args) {
    	// ArrayListの作成
    	ArrayList<Hello> hello = new ArrayList<Hello>();
    	ArrayList<Hello> subhello = new ArrayList<Hello>();

    	// ArrayListに値の追加
    	hello.add(new Hello("A"));
    	hello.add(new Hello("B"));
    	hello.add(new Hello("C"));

    	// ArrayListにリストの追加
    	subhello.addAll(hello);

    	// ArrayListの値を変更
    	hello.set(0, new Hello("D"));

    	// ArrayListの要素数
    	System.out.println("helloの要素数："+hello.size());

    	// ArrayList同士の一致する要素番号
    	System.out.println("subhello(2)と一致するhelloの要素番号："+hello.indexOf(subhello.get(2)));

    	// ArrayListに値が含まれるか判定する
    	System.out.println("helloに値が含まれるか："+hello.contains(subhello.get(2)));

    	// ArrayListから指定すた要素番号の値を削除する
    	hello.remove(2);

    	// ArrayListの重複する値を削除する。
    	subhello.stream().distinct().collect(Collectors.toList());

    	// ArrayListをコピーする。
    	ArrayList<Hello> clonehello = (ArrayList<Hello>) hello.clone();

    	// ArrayListの表示
    	for(Hello h : hello) {
    		h.showGreeting();
    	}
    	System.out.println();
    	for(Hello sub : subhello) {
    		sub.showGreeting();
    	}
    	System.out.println();
    	for(Hello clone : clonehello) {
    		clone.showGreeting();
    	}
    }
}
```

```java:Hello.java
package Test1;
public class Hello {
	// インスタンス変数
	String name;

	// コンストラクタ
    public Hello(String name) {
        this.name = name;
    }
    // 挨拶の表示
    void showGreeting() {
        System.out.println(name+"さん、こんにちは。");
    }
}
```

- 上記の文をコピーして、文字コードは `S-JIS` を指定し、ファイル名を `Test1.java` , `Hello.java` で保存し、実行するとこうなります。↓↓　　　　　　　　　
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/6d3d2cef-6476-d48f-07c2-d3c79600a25d.png)

## 6.GitHub
GitHubにソースコードを公開しています。

https://github.com/ryomeblog/qiita/tree/master/【わかりやすく解説‼】ArrayListの使い方【Java】


## 7.関連
- [【覚えておくと便利!!!】Eclipseにおけるコンストラクタとgetter/setterの簡易作成](https://qiita.com/ryome/items/6c487ccc0c39847cd55f)
- [【覚えておくと便利!!!】Eclipseにおける継承クラスの簡易作成](https://qiita.com/ryome/items/4fcf62b4bc60fb6a4d07)
- [【初心者でもできる‼】Javadocの書き方](https://qiita.com/ryome/items/4f2d5928c8aaf195f407)
- [【わかりやすく解説‼】Javaのオーバーロードの使い方](https://qiita.com/ryome/items/f1ca8cc7538f4c6d26c0)
- [【わかりやすく解説‼】Javaのカプセル化の使い方](https://qiita.com/ryome/items/fc44dfad297b35bf7559)
- [【わかりやすく解説‼】Javaの継承の使い方【オーバーライドの解説あり】](https://qiita.com/ryome/items/97b82c5519e39d3f21c1)
- [【わかりやすく解説‼】Javaにおける参照型の型変換](https://qiita.com/ryome/items/2453949b978bf166e204)