\r\n\r\n
JavaArrayList は、サイズ変更可能な汎用配列である。他の言語では配列に通常要求される機能のほとんどを提供する。インデックスを用いた要素へのアクセス、要素の追加・削除・更新、動的なサイズ変更、要素に対する反復処理などの操作が含まれます。これらの操作のほとんどは、一般的な用途に合うように特別にアレンジされたものです。
他にも、特殊な用途に使われる「配列」(リストインターフェースを実装したクラスで、技術的な意味合いが強い)があり、以下のような種類があります。
これらの特殊なクラスはこの記事の範囲外ですが、一般的なJavaArrayListのセットアップと使用方法については学習します。
ArrayListの作成は簡単です。無引数コンストラクタで空のArrayListを作成することができます。ここでは、文字列を格納するための空のArrayListを作成します。
ArrayList alist = new ArrayList();もし、arraylistに含まれるアイテムの数が分かっている場合は、初期容量を指定することができます。この初期容量は、メモリ割り当てのヒントに過ぎず、アレイリストは指定された数の項目を保持することに限定されるものではない。初期容量がわかっていて指定すれば、少しは性能が上がるかもしれません。
ArrayList alist = new ArrayList(20);配列リストへの書き込みは非常に簡単です。add()メソッドを使って、配列リストの末尾に1つだけ項目を追加するだけです。一例として
ArrayList alist = new ArrayList();alist.add("apple");alist.add("banana");alist.add("cantaloupe");alist.add("orange");System.out.println(alist);# prints[apple, banana, cantaloupe, orange]配列リストの項目数を知るには、size()メソッドを使用します。
System.out.println("Number of elements in the arraylist: " + alist.size());# printsNumber of elements in the arraylist: 4任意のインデックスに項目を追加するには、最初のパラメータとしてインデックスを指定し、そのインデックスに項目を追加します。
alist.add(3, "grapes");System.out.println(alist);# prints[apple, banana, cantaloupe, grapes, orange]また、Javaのコレクション階層内の任意のコレクションから項目を追加することができます。ArrayListはListと呼ばれる特定の型です。ここでは、一連の項目からリストを作成し(array.asList()を使用)、ArrayListに追加する方法の一つを紹介します。
List items = Arrays.asList("pear", "cherry");alist.addAll(items);System.out.println(alist);# prints[apple, banana, cantaloupe, grapes, orange, pear, cherry]もちろん、ここで最初のパラメータとしてインデックスを指定すれば、そのインデックスから始まる項目を追加することができます。
一旦、arraylistに項目を追加した後、再度アクセスするにはどうしたらよいでしょうか。
項目のインデックスがわかっている場合は、get()メソッドでそのインデックスにある要素を取得することができます。
String item = alist.get(2);System.out.println("Item at index 2 is: " + item);# printsItem at index 2 is: cantaloupeアイテムのインデックスがわからない場合はどうすればよいですか?indexOf() を使用すると、配列内に項目が存在するかどうかを調べ、返されたインデックスを使用して項目を取得することができます。
System.out.println(alist);int index = alist.indexOf("orange");if ( index < 0 ) System.out.println("Item \"orange\" not found");else System.out.println("Item \"orange\" found at index " + index);# prints[apple, banana, cantaloupe, grapes, orange, pear, cherry]Item "orange" found at index 4項目が配列リストの中にない場合はどうなりますか? indexOf() メソッドは、項目が見つからない場合は -1 を返します。
index = alist.indexOf("grape");if ( index < 0 ) System.out.println("Item \"grape\" not found");else System.out.println("Item \"grape\" found at index " + index);# printsItem "grape" not foundもちろん、ArrayListの最も一般的な使い方は、要素に対して反復処理を行うことです。これを実現するためには、さまざまな方法があります。ここでは、いくつかの簡単な例を示します。
以下は、配列リストを反復処理し、ある種の処理のために項目を抽出する最も簡単な方法です。
for (String fruit : alist) { System.out.println("Found fruit \"" + fruit + "\"");}# printsFound fruit "apple"Found fruit "banana"Found fruit "cantaloupe"Found fruit "grapes"Found fruit "orange"Found fruit "pear"Found fruit "cherry"このコードでは、Java 1.5で導入されたJava拡張Forループを使用しています。これまでは、イテレータを使用して項目を反復処理することができました。また、以下の例のように、イテレーション中に要素を削除する必要がある場合にも、イテレータを使用することができます。(配列リストのコピーを作成し、そのコピーを処理したことに注意してください)。
ArrayList blist = new ArrayList(alist);for (Iterator iter = blist.iterator() ; iter.hasNext() ; ) { String fruit = iter.next(); if ( fruit.startsWith("c") ) iter.remove(); else System.out.println("Keeping \"" + fruit + "\"");}# printsKeeping "apple"Keeping "banana"Keeping "grapes"Keeping "orange"Keeping "pear"項目を追加したら、不要な項目を置き換える方法が必要です。これは、set()メソッドとインデックスを使用して行うことができます。
alist.set(5, "pineapple");System.out.println(alist);# prints[apple, banana, cantaloupe, grapes, orange, pineapple, cherry]次に、配列リストから項目を削除する方法を説明します。項目のインデックスがわかっている場合 (おそらく上記のように indexOf() を使用して) は、そのインデックスに対して remove() メソッドを使用します。削除された要素を返す。
String fruit = alist.remove(2);System.out.println("Removed element at 2: " + fruit);# printsRemoved element at 2: cantaloupeまた、リスト内で最初に出現する削除したい要素を指定することもできます。要素が見つかり、削除された場合、このメソッドは真を返します。
fruit = "grapes";System.out.println("Remove " +fruit+ " from the list? " + alist.remove(fruit));# printsRemove grapes from the list? trueプロジェクトでArrayListをどのように使用し、どのような特別な問題が発生しましたか?