Contents
ArrayListを扱う
ここではArrayListを扱うための基本的なことについてまとめています。より詳細に知りたい方はProcessingの公式チュートリアルやJavaの公式ドキュメントなどでご確認ください。
ArrayListの宣言、確保
あるType(このサイトではPVectorクラスなどが当てはまります)のArrayListを扱うためには、コンストラクタにTypeを指定して、宣言、確保する必要があります。
ArrayList<Type> al = new ArrayList<Type>();
例えば、PVectorクラスのArrayListを作るときは
ArrayList<PVector> points = new ArrayList<PVector>();
のように記述します。
int型やfloat型のArrayListを宣言、確保するときの注意点
int型やfloat型のArrayListを宣言、確保するときには注意が必要です。単純に
ArrayList<int> numbers = new ArrayList<int>();
のようにはできないようです。int型やfloat型のArrayListを宣言、確保するときに指定するTypeをIntegerやFloatとしなければいけないようです。
ArrayList<Integer> numbers = new ArrayList<Integer>();
ArrayList<Float> times = new ArrayList<Float>();
なお、以下で示すArrayListに対する各種演算を行う際には特にこのTypeを意識する必要はなく、値をint型やfloat型として扱うことができます。
ArrayListに対する演算
宣言、確保を行ったArrayListに対して実行できる演算について、このサイトで利用しているものを中心に以下にまとめます。より詳しく知りたい方はJavaの公式ドキュメントなどをご覧ください。
配列の末尾に値を追加する | al.add(element); | element:値(Type) |
配列のindex番目に値を追加する | al.add(index, element); | element:値(Type) index:番号(int) |
配列のindex番目の値を置き換える | al.set(index, element); | element:値(Type) index:番号(int) |
配列のindex番目の値を削除する (注:削除後、配列は前詰めされます) | al.remove(index); | index:番号(int) 返り値:index番目の値(Type) |
配列のindex番目の値を取得する | al.get(index); | index:番号(int) |
配列に入っている値の数を取得する | al.size(); | 返り値:値の数(int) |
値の並べ替え
ここでは、ArrayListに入っている値を何らかの条件で並べ替える方法についてまとめておきます。例として、ArrayListに指定するTypeがPVectorクラスのときにベクトルの大きさが小さい順に並べ替えることを考えてみます。
Comparatorの準備
ArrayListの値の並べ替えをするためにはComparatorインターフェイスが実装されたクラスを準備する必要があります。
import java.util.Comparator;
class CompareToSize implements Comparator<PVector>
{
int compare(PVector v1, PVector v2)
{
return int(v1.mag() - v2.mag());
}
}
Comparatorインターフェイスが実装されたクラス(ここではクラス名をCompareToSizeとしています)を上記のように書きます。クラスの中の抽象メソッドcompareは2つの引数に対して、第一引数が第二引数より大きくなるとき正の整数を返すようにすることでArrayListの値を小さい順に並べ替えるようにしています。逆にすれば、ArrayListの値が大きい順に並べ替えられます。また、プログラムの最初に”java.util.Comparator”をインポートしておきます。
並べ替えの実行
ArrayListの値を並べ替えるには、sortメソッドを使います。
import java.util.Comparator;
void setup(){
ArrayList<PVector> vecs = new ArrayList<PVector>();
vecs.add(new PVector(3.0, 0.0));
vecs.add(new PVector(1.0, 0.0));
vecs.add(new PVector(2.0, 0.0));
println("置き換え前:", vecs);
vecs.sort(new CompareToSize());
println("置き換え後:", vecs);
}
class CompareToSize implements Comparator<PVector>
{
int compare(PVector v1, PVector v2)
{
return int(v1.mag() - v2.mag());
}
}
これを実行すると、スケッチ下部のコンソール部分に以下のように表示されます。
置き換え前: [[ 3.0, 0.0, 0.0 ], [ 1.0, 0.0, 0.0 ], [ 2.0, 0.0, 0.0 ]]
置き換え後: [[ 1.0, 0.0, 0.0 ], [ 2.0, 0.0, 0.0 ], [ 3.0, 0.0, 0.0 ]]
実際に、ArrayListの値が小さい順に並べ替えられたことが分かります。