検索
連載

Java Tips:テキストをソートするにはJAVA Developer

プログラムのなかでデータを特定の条件でソートして使いたい場合があります。今回のTipsは,コレクションフレームワークのjava.util.TreeSetクラスを使った簡単なソート機能を紹介します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

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.

ページトップに戻る