removeメソッド - ArrayListクラス - 萌えJava超入門
ArrayListクラス

removeメソッド

指定したインデックスの要素を削除します。

public E remove(int index)

目次

1. removeメソッド


指定したインデックスの要素を削除します。
要素の値ではなく、要素そのものを削除しますので、要素数が一つ減ります。
戻り値は、削除した要素の値です。

 public E remove(int index)

removeメソッド 書式
ArrayList<E> arraylist;
int index;
   E e = arraylist.remove(index);

萌えJava超入門
addで足して
setで変えて
removeで削除。
萌えJava超入門
これで最低限の機能は
一通り網羅したのかしら?
萌えJava超入門
そうだな。
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」されます。
萌えJava超入門
図を見てもらえばわかる。
こういう事だ。
removeメソッドによるインデックスの変化
ArrayList_remove.png

萌えJava超入門 萌えJava超入門
なるほど。


4. すべての要素を removeするサンプル

for文で繰り返し要素の削除を行う場合には、インデックスの繰り上がりに注意する必要があります。
例として、すべての要素を順番に削除するプログラムを書いてみましょう。

萌えJava超入門
先ずは
上手く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

**初期値**

アカレンジャーです。
アオレンジャーです。
キレンジャーです。
モモレンジャーですわ。
ミドレンジャーです。

**変更後**

アオレンジャーです。
モモレンジャーですわ。


萌えJava超入門
あれあれ?
全部消えてないっスね。
あっもしかして!
萌えJava超入門 萌えJava超入門

もうおわかりかもしれませんが、軽く説明させていただきますね。
  1. remove(0)でアカレンジャーを消しました。
  2. アオレンジャーが繰り上がってインデックス[0] になりました。
  3. remove(1)で消えるのはキレンジャーです。
  4. モモレンジャーが繰り上がってインデックス[1] になりました。
  5. remove(2)でミドレンジャーが消えました。
というわけで、このコードでは removeすると、その次の要素が removeできないんですね。



繰り返し removeするときは、後ろの要素から処理すると、
インデックスの繰り上がりが影響しないので上手くいきます。

萌えJava超入門
今度は
上手く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に限らず、リストの一部を削除するときはだいたい後ろからです。
上手く削除できないときは思い出してくださいね。




お疲れ様でした。




© 2019 awasekagami