この記事の目次
1. Listインタフェースのまとめ
java.util.*をimportします。| メソッド | 戻り値の型 | メソッドの意味 |
|---|---|---|
| add(E element) | boolean | 指定された要素をリストの最後に追加します |
| add(int index,E element) | void | リスト内の指定された位置に、してされた要素を挿入します |
| addAll(C< extends E> c) | void | 指定コレクション(バラメータ:要素型)をリストの最後に追加します |
| clear() | void | 全ての要素をリストから削除します |
| contains(Object o) | boolean | リストに指定の要素がリストと等しいかどうかを比較します |
| get(int index) | E | リスト内の指定された位置にある要素を返します |
| isEmpty() | boolean | リストに要素がない場合にtrueを返す |
| listIterator(int index) | ListIterator< E > | リスト内の指定された位置から開始する反復子を返します |
| listIterator() | ListIterator< E > | listIterator(0)と同じ |
| lastIndexOf(Object o) | int | 指定要素がリスト内で最後に検出された位置のインデックスを返します |
| remove(int index) | E | リスト内の指定された位置にある要素を削除します |
| remove Object o | boolean | 指定要素がリストにあればその最後のものをリストから削除します |
| set(int index,E element) | E | リスト内の指定位置にある要素を指定要素に置き換えます |
| size() | int | リスト内にある要素の数を返します |
2. ArrayListの宣言と初期化
Java6以前: ArrayList<データ型名> 変数名 = new ArrayList<データ型名>(); Java7以後: ArrayList<データ型名> 変数名 = new ArrayList<>();
ArrayList< String > listStr = new ArrayList<>(); ArrayList< Integer > listInt = new ArrayList<>(); ArrayList< Float > listFloat = new ArrayList<>(); ArrayList< Date > listDate = new ArrayList<>();
3. 要素の格納・追加・取得・取消
● 要素を格納・追加する
* add, addAllで要素を追加する
ArrayList変数名.add(値); ArrayList変数名.add(場所,リスト); ArrayList変数名.addAll(リスト); ArrayList変数名.addAll(場所,リスト); Collections.addAll(ArrayList変数名,値1,値2,値3....);
値を追加します。また、0から始まるint値と要素を引数として指定すると、指定の位置に値を挿入することもできます。リストを追加します。また、0から始まるint値と要素を引数として指定すると、指定の位置にリストを挿入することもできます。package helloworld;
import java.util.ArrayList;
import java.util.Collections;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list1 = new ArrayList<>();
//addメソッドでlist1に値を1つずつ追加します
list1.add(1);
list1.add(3);
list1.add(4);
list1.add(1,2);//listの1番目に「2」を追加します
System.out.println("ArrayList1の要素: " + list1);
ArrayList< Integer > list2 = new ArrayList<>();
//CollectionsクラスのaddAllメソッドでlist2に値を一斉に追加します
Collections.addAll(list2, 5,6,7,8);
System.out.println("ArrayList2の要素: " + list2);
//addAllでlist1の末尾にlist2を追加します
list1.addAll(list2);
System.out.println("addAllでlist1の末尾にlist2を追加した: " + list1);
}
}ArrayList1の要素: [1, 2, 3, 4] ArrayList2の要素: [5, 6, 7, 8] addAllでlist1の末尾にlist2を追加した: [1, 2, 3, 4, 5, 6, 7, 8]
* setで要素を書き換える
ArrayList変数名.set(場所,書き換える値);
package helloworld;
import java.util.ArrayList;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list1 = new ArrayList<>();
//list1に値を追加します
list1.add(1);
list1.add(1);
list1.add(3);
list1.add(4);
System.out.println("ArrayList1の要素: " + list1);
//list1の1番目の要素を2に書き換える
list1.set(1, 2);
System.out.println("新ArrayList1の要素: " + list1);
}
}ArrayList1の要素: [1, 1, 3, 4] 新ArrayList1の要素: [1, 2, 3, 4]
* Collections.fill()でリストの全ての要素を書き換える
Collections.fill(ArrayList変数名, 値);
package helloworld;
import java.util.ArrayList;
import java.util.Collections;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list1 = new ArrayList<>();
//list1に値を追加します
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
System.out.println("ArrayList1の要素: " + list1);
//list1のすべての要素を0に書き換える
Collections.fill(list1, 0);
System.out.println("新ArrayList1の要素: " + list1);
}
}ArrayList1の要素: [1, 2, 3, 4] 新ArrayList1の要素: [0, 0, 0, 0]
● 要素を取り出す
get(要素の位置);
package helloworld;
import java.util.ArrayList;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list1 = new ArrayList<>();
//list1に値を追加します
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
System.out.println("ArrayList1の0番目の要素: " + list1.get(0));
System.out.println("ArrayList1の1番目の要素: " + list1.get(1));
}
}ArrayList1の0番目の要素: 1 ArrayList1の1番目の要素: 2
● 要素を削除する
* 指定位置の要素を削除する
ArrayList変数名.remove(位置);
* clear()で全ての要素を削除する
ArrayList変数名.clear();
package helloworld;
import java.util.ArrayList;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list1 = new ArrayList<>();
//list1に値を追加します
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
//list1の2番目の要素を削除する
list1.remove(2);
System.out.println("ArrayList1の全ての要素: " + list1);
//list1の全ての要素を削除する
list1.clear();
System.out.println("ArrayList1の全ての要素: " + list1);
}
}ArrayList1の全ての要素: [1, 2, 4] ArrayList1の全ての要素: []
4. 要素を順に取り出す4つの方法
● for文を用いたリスト要素の取り出し
for(int i=0; i < ArrayList変数名.size(); i++){
//ArrayList変数名.get(i)で要素を読み書き
} for文と配列について詳しく見たい方:
| for文と配列 ../../../java/java-array.html?goto=3to2 配列とは、同じ型の複数の値をまとめて一つの変数として扱うことができるデータ構造です。この記事では配列の宣言、初期化、追加などの基本操・・・ |
package helloworld;
import java.util.ArrayList;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list1 = new ArrayList<>();
//list1に値を追加します
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
//for分でArrayListの要素を取り出す
for (int i = 0; i < list1.size(); i++){
System.out.println(list1.get(i));
}
}
}1 2 3 4
● 拡張for文を用いたリスト要素の取り出し
for(ArrayList要素の型 e: ArrayList 変数名){
//e で要素を読み書き
}ArrayListに使う拡張for文はArrayに使う拡張for文と似ていますので楽勝ですね。
package helloworld;
import java.util.ArrayList;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list1 = new ArrayList<>();
//list1に値を追加します
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
//拡張for分でArrayListの要素を取り出す
for(Integer e : list1){
System.out.println(e);
}
}
}1 2 3 4
● イテレータを用いたリスト要素の取り出し
Iterator< ArrayList要素型 > it = ArrayList変数名.iterator();
while(it.hasNext()){
ArrayList要素型 e = it.next();
//要素 e を用いた処理
}List用の反復子のListIterator インタフェースのメソッド:
| メソッド | メソッドの意味 | 戻り値型 |
|---|---|---|
| hasNext() | 順方向に次の要素を持っている場合にtrueを返す | boolean |
| hasPrevious() | 逆方向に次の要素を持っている場合にtrueを返す | boolean |
| next() | リスト内の次の要素を返す | E |
| nextIndex() | 次のnextで返されることになる要素のインデックスを返す | int |
| previous() | リストの前の要素を返す | E |
| previousIndex() | 次のpreviousで返されることになる要素のインデックスを返す | int |
| remove() | next/previousが返した最後の要素をリストから削除する | void |
| set(R e) | next/previousが返した最後の要素を指定要素で置き換える | void |
package helloworld;
import java.util.ArrayList;
import java.util.Iterator;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list1 = new ArrayList<>();
//list1に値を追加します
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
//IteratorでArrayListの要素を取り出す
Iterator< Integer > it = list1.iterator();
while(it.hasNext()){
Integer e = it.next();
System.out.println(e);
}
}
}1 2 3 4
● forEachメソッドを用いたリスト要素の取り出し
ArrayList変数名.forEach(引数 -> 繰り返し行う処理(引数))
package helloworld;
import java.util.ArrayList;
import java.util.Iterator;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list1 = new ArrayList<>();
//list1に値を追加します
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
//forEachでArrayListの要素を取り出す
list1.forEach(e -> System.out.println(e));
}
}1 2 3 4
5. 主に使われているメソッド
● sizeで要素数を取得する
ArrayList変数名.size();
sizeメソッドはリストの要素数を取得する場合に使用します。
Listを初期化直後にsizeメソッドを使った場合は0を返してくれます。
package helloworld;
import java.util.ArrayList;
import java.util.Iterator;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list1 = new ArrayList<>();
//listの要素数をコンソールに出力する
System.out.println("ArrayListの初期化直後のサイズ:" + list1.size());
//list1に値を追加します
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
//listの要素数をコンソールに出力する
System.out.println("ArrayList" + list1 + "のサイズ:" + list1.size());
}
}ArrayListの初期化直後のサイズ:0 ArrayList[1, 2, 3, 4]のサイズ:4
● indexOfで要素の位置を検索する
ArrayList変数名.indexOf(値); ArrayList変数名.lastIndexOf(値);
package helloworld;
import java.util.ArrayList;
import java.util.Iterator;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list = new ArrayList<>();
//listに値を追加します
list.add(1);
list.add(2);
list.add(2);
list.add(1);
int index = list.indexOf(2);
int lastIndex = list.lastIndexOf(2);
System.out.println("最初の要素番号 = " + index);
System.out.println("最後の要素番号 = " + lastIndex);
System.out.println("要素が見つからない場合の戻り値:" + list.lastIndexOf(4));
}
}最初の要素番号 = 1 最後の要素番号 = 2 要素が見つからない場合の戻り値:-1
● containsで要素の有無を確認する
ArrayList変数名.contains(値);
package helloworld;
import java.util.ArrayList;
import java.util.Iterator;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list = new ArrayList<>();
//listに値を追加します
list.add(1);
list.add(2);
list.add(2);
list.add(1);
//listの全ての要素をコンソールに出力する
System.out.println("全要素:" + list);
if(list.contains(2)){
System.out.println("要素2が見つかりました");
}else{
System.out.println("要素2が見つかりませんでした");
}
if(list.contains(3)){
System.out.println("要素3が見つかりました");
}else{
System.out.println("要素3が見つかりませんでした");
}
}
}全要素:[1, 2, 2, 1] 要素2が見つかりました 要素3が見つかりませんでした
● subListでListの一部をコピーする
ArrayList変数名.subList(インデックスの始まり,インデックスの終わりの一つ後ろのインデックス);
package helloworld;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list = new ArrayList<>();
//listに値を追加します
list.add(1);
list.add(2);
list.add(3);
list.add(4);
//listの全ての要素をコンソールに出力する
System.out.println("listの全要素:" + list);
//新しいインスタンスsubListを作成し、listのsubListに確保します
List< Integer > subList = list.subList(1, 3);
//subListの全ての要素をコンソールに出力する
System.out.println("subListの全ての要素:" + subList);
}
}
listの全要素:[1, 2, 3, 4] subListの全ての要素:[2, 3]
* 元のListとsubListの値が共有されている
package helloworld;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list = new ArrayList<>();
//listに値を追加します
list.add(1);
list.add(2);
list.add(3);
list.add(4);
//listの全ての要素をコンソールに出力します
System.out.println("listの全要素:" + list);
//新しいインスタンスsubListを作成し、listのsubListに確保します
List< Integer > subList = list.subList(1, 3);
//subListの全ての要素をコンソールに出力します
System.out.println("subListの全ての要素:" + subList);
//元のArrayListの1番目の要素を100に書き換える
list.set(1, 100);
//listとsubListの全ての要素をコンソールに出力します
System.out.println("\nlistの要素の変更後:");
System.out.println("listの全要素:" + list);
System.out.println("subListの全ての要素:" + subList);
//subListの1番目の要素を101に書き換える
subList.set(1, 101);
//listとsubListの全ての要素をコンソールに出力します
System.out.println("\nsubListの要素の変更後:");
System.out.println("listの全要素:" + list);
System.out.println("subListの全ての要素:" + subList);
}
}listの全要素:[1, 2, 3, 4] subListの全ての要素:[2, 3] listの要素の変更後: listの全要素:[1, 100, 3, 4] subListの全ての要素:[100, 3] subListの要素の変更後: listの全要素:[1, 100, 101, 4] subListの全ての要素:[100, 101]
* subListメソッドでListの範囲を指定して一括削除をする
ArrayList変数名.subList(インデックスの始まり,インデックスの終わりの一つ後ろのインデックス).clear();
元のListとsubListの値が共有されているというsubListメソッドの性質を利用して、ArrayListの一部を一括削除することができます。
package helloworld;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list = new ArrayList<>();
//listに値を追加します
list.add(1);
list.add(2);
list.add(3);
list.add(4);
//listの全ての要素をコンソールに出力します
System.out.println("listの全要素:" + list);
//新しいインスタンスsubListを作成し、listのsubListに確保します
List< Integer > subList = list.subList(1, 3);
//subListの全ての要素をコンソールに出力します
System.out.println("subListの全要素:" + subList);
//subListの全要素を削除する
subList.clear();
//listの全ての要素をコンソールに出力します
System.out.println("subListの全要素をclearした後のlistの全要素:" + list);
}
}listの全要素:[1, 2, 3, 4] subListの全要素:[2, 3] subListの全要素をclearした後のlistの全要素:[1, 4]
● remove、removeAll、removeif、clearで要素を削除する
ArrayList変数名.remove(index番号); ArrayList変数名.removeAll(Collection型のオブジェクト); ArrayList変数名.removeif(ラムダ式); ArrayList変数名.clear();
package helloworld;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list = new ArrayList<>();
//listに値を追加します
list.add(1);
list.add(2);
list.add(3);
list.add(2);
list.add(4);
list.add(2);
list.add(5);
//listの全ての要素をコンソールに出力します
System.out.println("listの全要素:" + list);
//listの1番目の要素を削除します。
list.remove(1);
System.out.println("listの1番目の要素を削除した後のlistの全要素:" + list);
//listの中でlist2の要素と等しい要素を削除します。
ArrayList< Integer > list2 = new ArrayList<>();
list2.add(2);
list.removeAll(list2);
System.out.println("listの「2」の要素を削除した後のlistの全要素:" + list);
// listリストの要素をeとしてひとつひとつを参照し、eが4と等しいのものを削除します。
list.removeIf(e -> e == 4);
System.out.println("removeIfメソッドでlistの「4」の要素を削除した後のlistの全要素:" + list);
//subListの全要素を削除する
list.clear();
System.out.println("list全要素をclearした後のlistの全要素:" + list);
}
}listの全要素:[1, 2, 3, 2, 4, 2, 5] listの1番目の要素を削除した後のlistの全要素:[1, 3, 2, 4, 2, 5] listの「2」の要素を削除した後のlistの全要素:[1, 3, 4, 5] removeIfメソッドでlistの「4」の要素を削除した後のlistの全要素:[1, 3, 5] list全要素をclearした後のlistの全要素:[]
● sortでListの要素をソートする
昇順でソート:Collections.sort(ArrayList変数名); 降順でソート:Collections.sort(ArrayList変数名, Collections.reverseOrder());
package helloworld;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
ArrayList< Integer > list = new ArrayList<>();
//listに値を追加します
list.add(1);
list.add(2);
list.add(3);
list.add(2);
list.add(4);
list.add(2);
list.add(5);
//listの全ての要素をコンソールに出力します
System.out.println("元のlistの全要素:" + list);
//昇順でソート:
Collections.sort(list);
System.out.println("昇順:" + list);
//降順でソート:
Collections.sort(list,Collections.reverseOrder());
System.out.println("降順:" + list);
}
}listの全要素:[1, 2, 3, 2, 4, 2, 5] 昇順:[1, 2, 2, 2, 3, 4, 5] 降順:[5, 4, 3, 2, 2, 2, 1]
6. 配列とListの相互変換
配列からArrayListへの変換:ArrayList変数名 = Arrays.asList(配列変数名); ArrayListから配列への変換:配列変数名 = ArrayList変数名.toArray();
package helloworld;
import java.util.Arrays;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
// 配列からListへの変換
//コレクションで使われてるのはクラス型なので、intなどのプリミティブ型を利用できないため、配列にIntegerで宣言します。
Integer[] array1 = {1,2,3,4};
List list1 = Arrays.asList(array1);
//list1の全要素をコンソールに出力する
System.out.println("List: " + list1);
// Listから配列への変換
Integer[] array2 = list1.toArray(new Integer[list1.size()]);
//array2の全要素をコンソールに出力する
System.out.print("Array: ");
for(Object e: array2) {
System.out.print(e + " ");
}
}
} List: [1, 2, 3, 4] Array: 1 2 3 4
7. まとめ
この記事ではList型オブジェクトのArrayListクラスを紹介しました。
ArrayListの宣言、初期化や要素の格納・追加・取得・取消などの基本操作を解説しました。要素を順に取り出す4つの方法を覚えて、どちらの方法も使いこなしてくれればいいなと思います。またList型オブジェクトに用意されているメソッドをいくつ紹介しましたが、まだたくさんありますので、用があればぜひ検索して習得してください。
8. 演習問題
JAVAのArrayListの演習問題