【Java】ArrayListの要素をソート(並べ替え)する

ArrayListクラスで作る、可変長配列の要素を並べ替える方法をメモします。
(配列と同様、要素は追加した順番に並んでいる)

文字列(String型)を格納するListの要素をソートする

アルファベット順(A to Z)に並べ替える

List型の変数animalsをCollectionsクラスのsortメソッドの引数に渡してソートする。

変数animalsをコンソールに出力してソートの前後で並びを比較する。

ソート後は要素がA to Zの並びに入れ替わる。

実行結果(コンソールに出力):

ソートなし:[dog, ferret, cat, mouse, bird]
ソートあり:[bird, cat, dog, ferret, mouse]

逆向き(Z to A)に並べ替える

逆向きに並べ替えたい場合は、
Collections.sortメソッドの二つ目の引数にCollectionsクラスのreverseOrder()メソッドを渡す。

Collections.sort(animals, Collections.reverseOrder());

自作のオブジェクトクラスを格納するListの要素をソートする

自分で作成したオブジェクトクラスを格納するListの要素を並べ替えたいとき、
並べ替えの基準をクラスのメンバー変数にすることが出来る。

id、name、ageの数値型と文字列型のメンバー変数を持つPersonクラスを定義する。

数値型のメンバー変数でソートする (Comparatorを使用)

PersonクラスのInteger型メンバー、idを基準にListの要素を並べ替える。

実行結果(コンソールに出力):

ソート無し:[id=2, name=Andy, age=40, id=1, name=Dave, age=25, id=4, name=Beck, age=17, id=3, name=Zack, age=32]
comparatorでソート id順[id=1, name=Dave, age=25, id=2, name=Andy, age=40, id=3, name=Zack, age=32, id=4, name=Beck, age=17]

(14行目)
String型のList要素の並び替えと同様Collectionクラスのsortメソッドを使用し、
第2引数にjava.utilパッケージのComparatorインターフェースを指定する。

(16行目)
compareメソッドをオーバーライドして、Person型同士を比較するよう引数に渡す。

(18行目)
returnの値を※Integerクラスのcompareメソッドから返す。
2つのPerson型オブジェクトからメンバー変数idを取り出して引数に渡している。

ソートの順番を変える場合は、引数を逆向きにする。

※これでもOK

※Integerクラスのcompareメソッド

compare(int x, int y)

2つのint値を比較する。

x == y の場合は値0、x < yの場合は-1、x > yの場合は1を返す。

文字列型のメンバー変数でソートする (Comparatorを使用)

PersonクラスのString型メンバー、nameを基準にListの要素を並べ替える。

実行結果(コンソールに出力):

ソート無し:[id=3, name=Zack, age=32, id=2, name=Andy, age=40, id=1, name=Dave, age=25, id=4, name=Beck, age=17]
comparatorでソート nameの順[id=2, name=Andy, age=40, id=4, name=Beck, age=17, id=1, name=Dave, age=25, id=3, name=Zack, age=32]

(14行目)
Collectionクラスのsortメソッドを使用し、
第2引数にComparatorインターフェースを指定する。

(16行目)
compareメソッドをオーバーライドして、Person型同士を比較するよう引数に渡す。

(19行目)
StringクラスのcompareToメソッドで変数nameの値文字列を辞書的に比較した結果をreturnの戻り値にする。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください