この記事はJavaとPythonを基礎から学びたい私のための Advent Calendar 2024の5日目の記事です。
間違っている部分があれば、教えてください。勉強になります。
List
配列なんかと違って、中の要素を簡単に消したり追加することができるのが便利なやつです。配列と違って最初に何個の要素を入れるかわからなくても作ることができます。
宣言、初期化
まず、Listを使うときには
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
これが必要です。これがないと、下のようにエラーが出ます。
TEST.java:6: エラー: シンボルを見つけられません
List<Integer> B=new ArrayList<Integer>();
^
シンボル: クラス List
場所: クラス TEST
TEST.java:6: エラー: シンボルを見つけられません
List<Integer> B=new ArrayList<Integer>();
^
シンボル: クラス ArrayList
場所: クラス TEST
エラー2個
こんな感じになります。エラーになって実行することができません。
importをすることで、必要な機能を使える状態にできます。
空のListを作る場合は、
List<Integer> A=new ArrayList<Integer>();
こんな感じでできます。この書き方では、このあと入れたいものを入れたり消したりできます。
好きなように入れたり消したりできる状態を「可変」というようです。
ちなみに、最初から中身が入った可変のリストは
List<Integer> B=new ArrayList<Integer>(Arrays.asList(0,2,2,3,2));
こんな感じで書けます。
これに対して、不変と呼ばれるListが存在します。
List<Integer> B=List.of(0,2,2,3,2);
最初から中身が入っています。
この場合、入れたいものがあっても謎のエラーが出てきて入れることができませんでした。好きなように入れたり消したりできない状態を「不変」というそうです。
可変と不変の違い
//可変なList
List<Integer> X=new ArrayList<Integer>(Arrays.asList(0,2,2,3,2));
List<Integer> Y=new ArrayList<Integer>();
X.add(2);
Y.add(3);
//不変なList
List<Integer> Z=Arrays.asList(0,2,2,3,2);
Z.add(5);//これがエラーになる
並べて書くと、違いが分かりやすいです。Arrays.asListのみのListでは途中で値を追加できませんでした。そうでない、new ArrayList<>()を使ったものの場合は可変になりました。
要素を追加する
※可変なListのみできるっぽいです。
B.add(6);
たったこれだけでListに要素を追加できます。Listの1番目から順番に入れていくことができます。
位置を指定する場合は、こんな感じで書きます。
B.add(2,3);
かっこの中は、左が入れたい場所(今回は0から数えて3番目)、右が入れたい文字や数値です。調べたら、これのほかにinsertを使うやり方もあるっぽいですが、私の環境ではエラーが出てしまいました。
要素を取り除く
※可変なListのみできるっぽいです。
取り除く場合には、
B.remove(2,6);
removeを使うことで簡単に消すことができます。配列と違って、こっちは簡単に消せるのがいいですね。
値を変更する
不変でも可変でもできます。
B.set(1,6);
setを使うことで、変えたい場所を指定して変えられるようです。
並び替え
import java.util.Collections;
Collections.sort(B);
importが必須です。Collectionsとかいうものを使って並び替えを行うようです。
まとめ
Listには、追加したり消したりできる可変なListとできない不変なListの二種類が存在する。ぱっと見区別がつかない。気を付けたい。
参考文献