- 公開日:2017-2-26 最終更新日:2017-2-20
- プロスタTOP / プログラミング初心者向け技術系ノウハウ・まとめ

Javaで配列やリストを扱っていると、その要素をソートしたくなることがあります。C言語など他の言語ではソートアルゴリズムを自分で実装する必要がありますが、Javaでは配列やリストを簡単にソートするためのメソッドが用意されており、それらを呼び出すだけで簡単にソートすることができます。
目次
配列をソートする
Arrays.sort()でソートする
Javaの配列をソートする方法はいくつかありますが、最も単純な方法はArrasyクラスのsort()を使う方法です。Arraysクラスのsort()の使い方は以下の通りです。
1 2 3 |
import java.util.Arrays #必ず必要 Arrays.sort(配列) |
sortはArraysクラスのメソッドなので、java.util.Arraysを必ずインポートするようにしましょう。sort()の引数に配列を渡すだけで、簡単にソートすることができます。ただし、元の配列にソート後の配列を上書きする形になるので、ソート前の配列も残しておきたい場合は別の配列にコピーするなどしておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Main { public static void main(String[] args){ int[] list1 = {5, 3, 8, 11, 2, 1}; System.out.print("ソート前:"); for(int i : list1){ System.out.print(i + " "); } Arrays.sort(list1); System.out.print("\nソート後:"); for(int i : list1){ System.out.print(i + " "); } } } |
実行結果
ソート後:1 2 3 5 8 11
Arrays.sort()を利用することで、配列がソートされているのが分かります。Arrays.sort()ではintやdoubleといったプリミティブ型は昇順にしかソートされないので、降順にしたい場合は昇順したソートを逆順にするなどの手順が必要です。
また、Arrays.sort()ではソートする範囲を指定することもできます。リストの一部だけをソートしたい時などに便利ですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class Main { public static void main(String[] args){ int[] list1 = {5, 3, 8, 11, 2, 1}; System.out.print("ソート前:"); for(int i : list1){ System.out.print(i + " "); } //2つ目の引数がソート開始位置、3つ目の引数がソート終了位置 //この例では0番から2番までの要素をソート Arrays.sort(list1, 0, 2); System.out.print("\nソート後:"); for(int i : list1){ System.out.print(i + " "); } } } |
実行結果
ソート後:3 5 8 11 2 1
リストをソートする
Collections.sort()でソートする
配列と同様に、リストもソートをすることができます。リストをソートするにはCollectionsクラスのsort()を使います。Collections.sort()の基本的な構文は以下の通りです。
1 2 3 |
import java.util.Collections; Collections.sort(リスト); |
Collections.srot()もArrays.sort()と同じような使い方になります。また、Collections.sort()も元のリストの中身が書き換えられてしまうので注意が必要です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args){ ArrayList list1 = new ArrayList(); list1.add(2); list1.add(8); list1.add(1); list1.add(16); list1.add(5); System.out.println("ソート前:" + list1); Collections.sort(list1); System.out.println("ソート後:" + list1); } } |
実行結果
ソート後:[1, 2, 5, 8, 16]
リストのsort()でソートする
Javaのリストをソートする場合は、リストクラスのsortメソッドを使うこともできます。リストクラスのsort()の使い方は以下の通りです。
1 2 3 |
import java.util.Comparator; リスト.sort(ソート順の指定) |
リストクラスのsort()では引数にComparatorインタフェースを用いてソート順を指定することができます。引数をComparator.naturalOrder()にした場合は昇順、Comparator.reverseOrder()にした場合は降順でソートされます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.ArrayList; import java.util.Comparator; public class Main { public static void main(String[] args){ ArrayList list1 = new ArrayList(); list1.add(2); list1.add(8); list1.add(1); list1.add(16); list1.add(5); System.out.println("ソート前:" + list1); list1.sort(Comparator.reverseOrder()); #降順でソート System.out.println("ソート後:" + list1); } } |
実行結果
ソート後:[16, 8, 5, 2, 1]
reverse()で逆順にする
Javaのリストを降順でソートするにComparatorインタフェースを使いましたが、もしComparatorを使わない場合は一度昇順にソートしたあとに逆順にする必要があります。配列を逆順にする場合は大変ですが、リストの場合はCollectionsクラスのreverse()メソッドを使うことで簡単に逆順にすることができます。
1 |
Collections.reverse(リスト) |
reverse()を使えば1行でさっとリストを逆順にすることができます。そのため、リストならsort()で昇順→reverse()で逆順の2ステップでソートを降順にできます。ソートを降順にしたい時以外でも、reverse()はさまざまな場面で役に立つので、覚えておくとよいでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Main { public static void main(String[] args){ ArrayList list1 = new ArrayList(); list1.add(2); list1.add(8); list1.add(1); list1.add(16); list1.add(5); System.out.println("ソート前:" + list1); Collections.sort(list1); Collections.reverse(list1); System.out.println("ソート後:" + list1); } } |
実行結果
ソート後:[16, 8, 5, 2, 1]
なお、reverse()もsort()と同様に元のリストの中身を書き換えてしまいますので、元のリストも残しておきたい場合は別のリストにコピーなどをするようにしましょう。