ArrayList クラスは大きさが決まっていない配列です。ダイナミックにリストの要素を追加・削除する場合に役立ちます。
ArrayList
分かりやすくListViewを利用してArrayListを使ってみました。
ボタン「要素を追加」を押すと ArrayList に要素が追加され、「要素を削除」を押すと、先頭の要素が削除される例です。
ArrayList
ArrayList<型> 変数名 = new ArrayList<型>( );<型>: Generics機能、にどのような型のクラスを格納するのかを指定します。
StringはStringクラスですが、intやfloatはクラスではないので基本型 Integer、Floatのラッパーを使います。
ArrayListのメソッド
要素の追加、削除など可変サイズの配列メリットを実現するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// ArrayList() のObject arrayList を生成 ArrayList<String> arrayList = new ArrayList<>(); // 要素を追加 arrayList.add("abc"); arrayList.add("defg"); arrayList.add("hijkl"); // 要素数を取得 arrayList.size(); // 要素のi番目を取得 arrayList.get(i); // 要素i番目を削除する arrayList.remove(i); |
ここでArralyListをListに変更することも可能です。
1 2 3 |
ArrayList<String> arrayList = new ArrayList<>(); // ArrayList -> List List<String> list = new ArrayList<>(); |
こうしても、このコードでは同じ結果になりますが違いは存在します。Listはインターフェイスでインスタンスを生成できないためArrayListを実装するために使います。
またListはインターフェースであり、実装クラスには他にLinkedListなどがあります。ArrayListとLinkedListはそれぞれメリット・デメリットがあり使用用途によって使い分けます。
サンプルコード
実際に使って見た例です。
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
//package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import java.util.ArrayList; import java.util.Locale; public class MainActivity extends AppCompatActivity implements OnClickListener { private TextView textView; private ArrayList<String> arrayList ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); arrayList = new ArrayList<>(); textView = findViewById(R.id.text_view); Button button1 = findViewById(R.id.button1); button1.setOnClickListener(this); Button button2 = findViewById(R.id.button2); button2.setOnClickListener(this); } @Override public void onClick(View v) { if(v.getId() == R.id.button1){ int number = arrayList.size(); // 要素を追加 arrayList.add(String.format(Locale.US, "要素%d: arrayList に追加\n", (number+1))); } else if(v.getId() == R.id.button2){ if(arrayList.size() > 0 ){ arrayList.remove(0); // 要素1番目を削除する } else{ Log.d("debug","要素が無い"); } } StringBuilder stb = new StringBuilder(); // 全ての要素を表示 for(int i=0; i< arrayList.size(); i++ ){ stb.append(arrayList.get(i)); } textView.setText(stb); } } |
レイアウトです
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#dfe" android:padding="16dp" tools:context=".MainActivity"> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:layout_marginLeft="80dp" android:layout_marginRight="80dp" android:text="@string/add" /> <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="80dp" android:layout_marginRight="80dp" android:layout_marginBottom="20dp" android:text="@string/remove" /> <TextView android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" android:textColor="#00f" android:gravity="center" /> </LinearLayout> |
リソースです
strings.xml
1 2 3 4 5 |
<resources> <string name="app_name">YourAppName</string> <string name="add">要素を追加</string> <string name="remove">要素を削除</string> </resources> |