【Java】Collectionsによる動的配列の操作
本稿は、JavaでArrayListやLinkedList等、Listインターフェースを実装したクラス等、コレクションAPIに対してソートなどの操作を行う方法を紹介します。
List要素のソート
sortメソッドを利用して要素の順序を並び替えできます。
引数にはComparatorを利用することで、任意のオブジェクトであってもソート可能です。
単純な数値のソートであれば、Comparatorの実装は不要です。
数値を昇順に並べ替え
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(2);
list.add(3);
list.add(510);
list.add(1);
Collections.sort(list);
System.out.println(list);
}
}
[1, 2, 3, 5, 510]
数値を降順に並べ替える場合はComparator.reverseOrderかCollections.reverseOrderメソッドを利用しましょう。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(2);
list.add(3);
list.add(510);
list.add(1);
Collections.sort(list,Collections.reverseOrder());
System.out.println(list);
}
}
[510, 5, 3, 2, 1]
任意のオブジェクトを昇順並べ替え(HPの昇順)
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Chara> list = new ArrayList<>();
list.add(new Chara("勇者",100));
list.add(new Chara("魔法使い",30));
list.add(new Chara("曲者",999));
Collections.sort(list, new Comparator<Chara>() {
@Override
public int compare(Chara o1, Chara o2) {
return o1.hp - o2.hp;
}
});
System.out.println(list);
}
}
class Chara{
String name;
int hp;
Chara(String name, int hp){
this.name = name;
this.hp = hp;
}
public String toString() {
return name;
}
}
[魔法使い, 勇者, 曲者]
任意のオブジェクトを降順で並べ替え(ラムダ式を利用)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Chara> list = new ArrayList<>();
list.add(new Chara("勇者",100));
list.add(new Chara("魔法使い",30));
list.add(new Chara("曲者",999));
Collections.sort(list, (o1,o2) -> o2.hp - o1.hp);
System.out.println(list);
}
}
class Chara{
String name;
int hp;
Chara(String name, int hp){
this.name = name;
this.hp = hp;
}
public String toString() {
return name;
}
}
[曲者, 勇者, 魔法使い]
List要素のシャッフル
shuffleメソッドを利用すると要素の順序を反転できます。
カードゲーム制作などでカードをランダムにシャッフルした場合等に使えます。
ゲーム制作では結構使えそうな場面がありそうです。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
Collections.shuffle(list);
System.out.println(list);
}
}
[4, 5, 3, 1, 2]
List要素の順序の反転
reverseメソッドを利用すると要素の順序を反転できます。
そんなに使用しないかもしれませんが、どこかで使えるかもしれません。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
Collections.reverse(list);
System.out.println(list);
}
}
[5, 4, 3, 2, 1]
同期List、同期Mapの作成
スレッドセーフなリストとしては、VectorやHashtableクラスなどもありますが、Collections.synchronized~メソッドを利用するほうが推奨されます。
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) {
List<Integer> list = Collections.synchronizedList(new ArrayList<>());
list.add(1);
list.add(2);
list.add(3);
System.out.println(list);
Map<String, Integer> map = Collections.synchronizedMap(new HashMap<>());
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
System.out.println(map);
}
}
[1, 2, 3]
{A=1, B=2, C=3}








ディスカッション
コメント一覧
まだ、コメントがありません