今回はListクラスのメソッドについてお話をさせて頂きます!
ListクラスにはListを操作するためのメソッドがいくつもありますがその中で
「追加済みの値を更新(変更)する方法を知りたい。」
「インデックス(場所)を指定して値を変更したい」
「Listクラスのsetメソッドの使い方を知りたい。」
と思った方はこの記事必見です!
この記事を見ればListクラスのsetメソッドの使い方を学ぶことができ上記の疑問がすぐ解決します!
なお、Javaの記事については、こちらにまとめています。
値を変更する方法
配列の場合、値を変更したいと思ったら次のように書きます。
int[] ary = new int[3]; ary[0] = 3;
これで0番目の要素に3という値を設定することができました。
ではListでこれを実現するにはどうしたら良いのでしょうか?
List内のデータを特定の値に書き換えたい場合はsetメソッドを使うことになります。
setメソッドの基本構文
setメソッドは次のような書き方になります。
List.set(場所,書き換える値);
一つ目の引数はList内のデータのどこのデータを書き換えたいのかを指定します。
この値は0~Listのデータ件数-1までが指定できるようになっています。
二つ目の引数は書き換える値ですが実際にどんな値に変更するのかをここで指定することになります。
この説明だけではわかりづらいかもしれません。
では次の項目で実際にプログラムを交えて解説します!
実際の使い方
まずはプログラムを示します。
import java.util.*; public class Main { public static void main(String[] args) throws Exception { List list = new ArrayList(); for(int i = 0; i < 5; i++) { list.add(i); } list.set(0, 3); for(int i = 0; i < 5; i++) { System.out.println(list.get(i)); } } }
実行結果:
3 1 2 3 4
このプログラムではListのインスタンス変数listを初期化して用意したあと、addメソッドを使って0~4の値をList内に追加しています。
次にsetメソッドを使用して0番目のデータを3に書き換えるという処理を行っています。
そのため、実行結果を見てわかるように一番最初のデータが3になっていますよね。
ここは元々は0だったのですがsetメソッドを使うことで3に上書きされたのです!
値をすべて書き換える
次に値をすべて変更するという方法をsetメソッドを使って実現してみたいと思います。
import java.util.*; public class Main { public static void main(String[] args) throws Exception { List list = new ArrayList(); for(int i = 0; i < 5; i++) { list.add(i); } for(int i = 0; i < 5; i++) { list.set(i, 3); } for(int i = 0; i < 5; i++) { System.out.println(list.get(i)); } } }
実行結果:
3 3 3 3 3
for文とsetメソッドの組み合わせで値をすべて書き換えることができます。
しかし、もっと短く書く方法が存在します。
その方法を次のプログラムで見てみましょう。
import java.util.*; public class Main { public static void main(String[] args) throws Exception { List list = new ArrayList(); for(int i = 0; i < 5; i++) { list.add(i); } Collections.fill(list, 3); for(int i = 0; i < 5; i++) { System.out.println(list.get(i)); } } }
実行結果:
3 3 3 3 3
先程とは違いsetメソッドは使っていません。
今回はCollectionsクラスのfillメソッドを使っています。
このfillメソッドは第一引数で指定したListに第二引数で指定した値に全て書き換えるというメソッドになります。
このメソッドは空のListに対しては使えないため注意が必要ですがもし全ての値を一括で同じ値に書き換えたい場合はこのメソッドを使うのが良いでしょう。
存在しない場所を指定するとどうなるの?
次に先程のプログラムを少し変更して存在しない場所のデータを上書きしようとするとどうなるのかを見ていきたいと思います。
import java.util.*; public class Main { public static void main(String[] args) throws Exception { List list = new ArrayList(); for(int i = 0; i < 5; i++) { list.add(i); } list.set(99, 3); for(int i = 0; i < 5; i++) { System.out.println(list.get(i)); } } }
実行結果:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 99, Size: 5 at java.util.ArrayList.rangeCheck(ArrayList.java:653) at java.util.ArrayList.set(ArrayList.java:444) ・・・
という形で例外が発生します。
このIndexOutOfBoundsExceptionは存在しない場所にアクセスした際に発生する例外です。
つまり、「そんな場所にデータはないよ!」と教えてくれており処理の続行が不可能になったのです。
最初のaddでデータは5個しか登録されていないので99番目のデータにアクセスしようと思ってもできないのは当然のことですよね!
貴方はSetクラスについて調べてきましたか?
Javaには紛らわしい事にsetと名のつくものがもう一つあります。
今回はsetメソッドについて解説をしましたがそれとは別にSetクラスというクラスが存在しています。
これらは全く別物ですのでもし間違えてこの記事にアクセスしてしまった場合は次の記事でSetクラスについて解説をしていますので是非ご覧ください!
まとめ
いかがでしょうか?
今回はsetメソッドについて解説をしました。
setメソッドは後から値を変更することができるという便利なメソッドです。
難しい内容ではないとは思いますがもし忘れてしまったらこの記事を思い出してくださいね!