Java Tips:テキストをソートするには:JAVA Developer
プログラムのなかでデータを特定の条件でソートして使いたい場合があります。今回のTipsは,コレクションフレームワークのjava.util.TreeSetクラスを使った簡単なソート機能を紹介します。
TreeSetクラスを使ったソート
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
コレクションフレームワークは,複数個のデータをまとめて扱うときに便利なデータ構造を持つインタフェースと,それを実装したクラスで構成されています。ここで紹介するjava.util.TreeSetクラスは,要素に順序を持った集合を実装したクラスです。まずは,基本的な使い方として,テキストファイルを1行ずつ読み込み,各行をソートして表示してみます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このソースでは,TreeSetクラスのインスタンスを作成し,addメソッドで読み込んだ各行の文字列を追加。すべて追加したら,ソートした結果を表示するためにIteratorインタフェースを使って要素を順番に取得し,表示しています。このソースでは,ソート処理を一切記述していません。
次のようなテストデータを用意しました。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
リスト1を実行すると,
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
と表示され,テキストファイルの内容が昇順にソートされていることがわかります。これは,TreeSetクラスが標準で「自然順序付け」に昇順ソートする機能を備えているためです。
独自のソートを実現する場合は,TreeSetクラスのインスタンスを作成する際に,コンパレータクラスを指定します。コンパレータクラスは,java.util.Comparatorインタフェースをインプリメントしてユーザーが実装するクラスで,ソートの順番を決めるためのcompareメソッドを定義します。ソート順を降順に変えるコンパレータクラスは,リスト2のように定義します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
リスト1の変更は,次に示す1行だけです。TreeSetのコンストラクタに,パラメータとしてコンパレータクラスMyCompのインスタンスを渡すだけです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
これを実行すると次のように降順に表示されます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このように独自のソートルールは,簡単に設定できます。
TreeSetクラスを利用するうえで注意するポイントは,重複したデータを登録できないということです。これは,TreeSetクラスの基となっているSetインタフェースの制限事項になります。もし,対象となるテキストが重複する可能性がある場合は,シリアル番号のような一意のデータを持つようにし,コンパレータクラスのcompareメソッドでテキストが一致する場合には一意のデータを利用して0が帰らないようにするとよいでしょう。
「JAVA Developer」より毎週役立つJava Tipsを配信中。ほかにも参考になるTipsは、JAVA Developerサイトのバックナンバーから探すことが可能です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.