#目次
- この記事を作成したきっかけ
- 実際に作ってみる
#この記事を作成したきっかけ
Javaのソースコードの修正時、ソート処理に悩んだので今回の記事を作成した
#実際に作ってみる
###昇順
並べ替えるListを用意
//数値のリストを用意
List<Integer> list = new ArrayList<Integer>();
Random r = new Random();
for(int i = 0; i < 10; i++) {
//0~99までの数値をランダムに設定
list.add(r.nextInt(100));
}
System.out.println("ソート前:");
//リストを表示する
for(int i = 0; i < 10; i++) {
System.out.print("[" + list.get(i) + "] ");
}
昇順にソートする
//昇順にソートする
Collections.sort(list);
System.out.println("\nソート後(昇順):");
//リストを表示する
for(int i = 0; i < 10; i++) {
System.out.print("[" + list.get(i) + "] ");
}
実行結果
ソート前:
[82] [79] [38] [63] [30] [65] [89] [97] [59] [68]
ソート後(昇順):
[30] [38] [59] [63] [65] [68] [79] [82] [89] [97]
###降順
次に、降順に並び替える
通常、Collections.sort()は昇順でソートが行われる
降順でソートされるように、以下を実施する。
- Comparatorをimplements(継承)したクラスNumberDescendingSortを作成
- compareメソッドをオーバーライドする
- o1 > o2 の場合は正の数が返される(return 1;) → 負の数が返されるようにする(return -1;)
- o1 < o2の場合は負の数が返される(return -1;) → 正の数が返されるようにする(return 1;)
降順でソートされるよう定義する
package sort;
import java.util.Comparator;
public class NumberDescendingSort implements Comparator<Integer>{
//通常は、o1 > o2 の場合は正の数が返され(return 1;)、 o1 < o2の場合は負の数が返される(return -1;)
//昇順がデフォルトなので、小さい順に並べられる。
//今回は降順としたいので、返される値を逆にしている。
//o1 > o2 の場合は負の数が返され(return -1;)、 o1 < o2の場合は正の数が返される(return 1;)
@Override
public int compare(Integer o1, Integer o2) {
//
if(o1 > o2) {
return -1;
}else if(o1 < o2) {
return 1;
}else {
return 0;
}
}
}
降順にソートする
//降順にソートする(NumberDescendingSortクラスを使用する)
//第一引数のリストを、第二引数で定義している通りに並び変える
Collections.sort(list,new NumberDescendingSort());
System.out.println("\nソート後(降順):");
for(int i = 0; i < 10; i++) {
System.out.print("[" + list.get(i) + "] ");
}
実行結果
ソート前:
[82] [79] [38] [63] [30] [65] [89] [97] [59] [68]
ソート後(降順):
[97] [89] [82] [79] [68] [65] [63] [59] [38] [30]
#最後に
ソートの処理を修正時に、昇順降順の条件に迷ってしまっていたが、
今回実際に作ってみて理解を深めることができました。