sort
概要
javaでのソート方法についてまとめます
Collectionsクラスのsortメソッドを利用
java.util.Collections.sort<List list>
このメソッドでは、要素の「自然順位付け」(String ならアルファベット順、int なら数値順)に従って昇順にソートします。
リストの要素は比較可能でなければならない。
java.util.Collections.sort<List list,Conparetor c>
独自のConparetorを渡すことで、並び替えを制御できます~
リストの中にオブジェクトや配列が格納されていた場合、Conparetor.compareをオーバーライドすることで~
配列のどの要素、オブジェクトのどのフィールドを比較対象にするか決めることができる。
Conparetor.compareのの記述は以下のような方法がある。
-
- 昇順の場合
public int compare(list<int> list1 list<int> list2){ int num1 = list1.get(2); int num2 = list2.get(2); if(num1.compareTo(num2) < 0){ return -1; } else if(num1.comareTo(num2) > 0){ return 1; } else { return 0; }
-
- 降順の場合
public int compare(list<int> list1 list<int> list2){ int num1 = list1.get(2); int num2 = list2.get(2); if(num1.compareTo(num2) < 0){ return 1; } else if(num1.comareTo(num2) > 0){ return -1; } else { return 0; }
詳しいサンプルプログラムは下記参考資料参照
Arraysクラスのsortメソッドを利用
- 配列をソート
上記Collection.sortと同じソートを実行できる
- Comparableインタフェース を実装したオブジェクトをソート
上記のようにListの中にオブジェクト等が格納されている場合、どの要素、フィールドを比較対象するかを、
sortメソッドの第2引数であるConparetor.compareメソッドで定義していた
しかし格納されているオブジェクトにComparebleインターフェイスを実装させ、compareTo(object obj1)をオーバーライドさせておくことで、同じことを実現できる。
※詳細なサンプルコードはこちら
http://www.moriwaki.net/wiki/index.php?%5B%5B%A5%AA%A5%D6%A5%B8%A5%A7%A5%AF%A5%C8%C7%DB%CE%F3%A4%CE%A5%BD%A1%BC%A5%C8%5D%5D
参考資料
- Arrays.sort()とインタフェースComparatorを使って多次元配列をソートしてみる
http://asistobe851.hp.infoseek.co.jp/my-memo/sort.html
- JAVA 開発眼も - オブジェクト配列のソート