ArrayListクラス
removeメソッド
指定したインデックスの要素を削除します。
public E remove(int index)
目次
1. removeメソッド
指定したインデックスの要素を削除します。
要素の値ではなく、要素そのものを削除しますので、要素数が一つ減ります。
戻り値は、削除した要素の値です。
public E remove(int index)
addで足して
setで変えて
removeで削除。
これで最低限の機能は
一通り網羅したのかしら?
そうだな。
ArrayListは今後も出てくる。
少しずつ慣れれば良いだろう。
2. サンプルコード
//Sample07_01.java
import java.util.ArrayList;
class Sample07_01{
public static void main(String[] args){
ArrayList<String> list = new ArrayList<String>();
list.add("アカレンジャーです。"); //0
list.add("アオレンジャーです。"); //1
list.add("キレンジャーです。"); //2
list.add("モモレンジャーですわ。");//3
list.add("ミドレンジャーです。"); //4
for(String str :list){
System.out.println(str);
}
System.out.println("\n**変更**\n");
String before = list.remove(2);
for(String str :list){
System.out.println(str);
}
System.out.println("\n" + before + "は欠番です。");
}
}
コマンドライン
>cd ws
ws>javac -encoding UTF-8 Sample07_01.java
ws>java Sample07_01
アカレンジャーです。
アオレンジャーです。
キレンジャーです。
モモレンジャーですわ。
ミドレンジャーです。
**変更**
アカレンジャーです。
アオレンジャーです。
モモレンジャーですわ。
ミドレンジャーです。
キレンジャーです。は欠番です。
3. removeメソッドによるインデックスの繰り上がり
removeメソッドを実行すると、以降のインデックスは繰り上がります。
削除されたインデックス以降のインデックスが「-1」されて、
size() も「-1」されます。
図を見てもらえばわかる。
こういう事だ。
removeメソッドによるインデックスの変化
なるほど。
4. すべての要素を removeするサンプル
for文で繰り返し要素の削除を行う場合には、インデックスの繰り上がりに注意する必要があります。
例として、すべての要素を順番に削除するプログラムを書いてみましょう。
先ずは
上手くremoveできない例を
示してみた。
//Sample07_02.java
import java.util.ArrayList;
class Sample07_02{
//動作しますが意図した結果になりません
public static void main(String[] args){
ArrayList<String> list = new ArrayList<String>();
list.add("アカレンジャーです。"); //0
list.add("アオレンジャーです。"); //1
list.add("キレンジャーです。"); //2
list.add("モモレンジャーですわ。");//3
list.add("ミドレンジャーです。"); //4
System.out.println("\n**初期値**\n");
for(String str :list){
System.out.println(str);
}
//全削除したい
for(int i=0; i<list.size(); i++){
list.remove(i);
}
System.out.println("\n**変更後**\n");
for(String str :list){
System.out.println(str);
}
}
}
コマンドライン
>cd ws
ws>javac -encoding UTF-8 Sample07_02.java
ws>java Sample07_02
**初期値**
アカレンジャーです。
アオレンジャーです。
キレンジャーです。
モモレンジャーですわ。
ミドレンジャーです。
**変更後**
アオレンジャーです。
モモレンジャーですわ。
あれあれ?
全部消えてないっスね。
あっもしかして!
もうおわかりかもしれませんが、軽く説明させていただきますね。
- remove(0)でアカレンジャーを消しました。
- アオレンジャーが繰り上がってインデックス[0] になりました。
- remove(1)で消えるのはキレンジャーです。
- モモレンジャーが繰り上がってインデックス[1] になりました。
- remove(2)でミドレンジャーが消えました。
というわけで、このコードでは removeすると、その次の要素が removeできないんですね。
繰り返し removeするときは、後ろの要素から処理すると、
インデックスの繰り上がりが影響しないので上手くいきます。
今度は
上手くremoveできる例だ。
//Sample07_03.java
import java.util.ArrayList;
class Sample07_03{
public static void main(String[] args){
ArrayList<String> list = new ArrayList<String>();
list.add("アカレンジャーです。");
list.add("アオレンジャーです。");
list.add("キレンジャーです。");
list.add("モモレンジャーですわ。");
list.add("ミドレンジャーです。");
System.out.println("\n**初期値**\n");
for(String str :list){
System.out.println(str);
}
//後ろから前に処理
for(int i=list.size()-1; i>=0; i--){
list.remove(i);
}
System.out.println("\n**変更後**\n");
for(String str :list){
System.out.println(str);
}
System.out.println(list.size());
}
}
コマンドライン
>cd ws
ws>javac -encoding UTF-8 Sample07_03.java
ws>java Sample07_03
**初期値**
アカレンジャーです。
アオレンジャーです。
キレンジャーです。
モモレンジャーですわ。
ミドレンジャーです。
**変更後**
0
ArrayListに限らず、リストの一部を削除するときはだいたい後ろからです。
上手く削除できないときは思い出してくださいね。
お疲れ様でした。