- - PR -
Javaにて ORDER BYのアルゴリズム実現方法
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-29 19:54
お世話になっています、Javaにてソートを実現の為知恵を
貸していただけるとありがたいです。 まず行いたいこととしましては、SQLのORDER BYの機能になります。
のような形のデータがあります(表イメージ) このデータに対して優先度 col1、 col2、 col3 の順にて ORDER BY col1, col2, col3のようなソートをかけ 並びを
と並べ替えたいと思っています。 ない知恵絞って考えた方法なんですが、 その1 1. col1列に対してソート処理 col1ソート後のデータをループでまわし、col2のi番目とi+1番目を比較し 一致している間一時格納用変数へ追加 以下の状態 1,2は重複ないためはぶく)
2. 上記状態のデータい対しcol2の値にソート 1同様にcol3のi番目とi+1番目を比較し再びソートし col1のデータ1と2のデータと連結し、ORDER BYちっくな処理を実現 その2 各データを文字列連結し以下のような状態に表す 312 322 211 111 321 今回の例で表すと3桁の数字にする これに対し、ソートを行い 111 211 312 321 322 と並べ替える と2つ思いついたのですがそれぞれ、懸念材料があります。 その1に対してはひたすらループをまわす為、レスポンスが大丈夫だろうかという点 その2に対しては(恥ずかしい話ですが)算数が得意ではないので、なんらかのレアケースが 発生しそう。 長々と書いてしまいましたが、指摘や、またほかのアルゴリズム、参考サイトありましたら ご教授ください。 また、JavaのAPIを駆使して作る方法などないでしょうか? や、ORDER BY 自体はどのようなアルゴリズムになっているのだろうなど 作っていて気になる点がふえてしまいましたが・・・ Googleにて漁ってはみたのですが、このような処理やアルゴリズムを発見することが できませんでした。 | ||||||||||||
|
投稿日時: 2005-11-29 20:01
よくわからないのですが、データベース内のデータをソートしたいのではないのですよね?
だとすると、col1、col2、col3というのはどのようなデータなのですか? Javaでソートと いうとCollections#sortでやるのが一般的ですが、それではできないことですか? | ||||||||||||
|
投稿日時: 2005-11-29 20:12
説明足らずで申し訳ありません。
データ事態は画面から渡されるもので、そのデータは固定長文字列になります。 バイト配列に変換後必要な項目を位置を指定して抜き出す形になっております。 (文字列、Stringにて保持)になります。 簡略化の為省いてしまったのですが、先ほど示したソートキーとは別に 値をもっています。 (col4 = データ1、col5 = データ2 などがあるイメージ)
のような表をイメージしていただき、col1〜3を使い 列単位で 並べ替えたいと考えています。 ※ SVFの帳票にて出力する際のソートになります。 Collectionクラスは検索時発見していたのですが、今回の ように3つのソートキーでは実現できない(?)のかと 思って候補にいれませんでした。 Javadocを見た限り実装方法が見えないのですが Comparator インターフェースを使い実現するのでしょうか? JDK1.4.2_08 eclipse 3.0 Tomcat5.0 SVF [ メッセージ編集済み 編集者: n.w 編集日時 2005-11-29 20:20 ] | ||||||||||||
|
投稿日時: 2005-11-29 20:20
値を表現するクラスを作成して、java.lang.Comparableを実装し、
java.util.Collections#sortでソートするのがよさそうですね。
こんな感じで実現可能かと思います。 詳しくはAPIドキュメントを参考にしてみてください。 | ||||||||||||
|
投稿日時: 2005-11-29 20:32
適切なComparatorを実装してCollections#sort()ですね。
実行結果 [1, 1, 3, 1, BBB] [1, 2, 1, 1, DDD] [2, 1, 3, 1, CCC] [3, 1, 1, 1, EEE] [3, 1, 1, 4, AAA] | ||||||||||||
|
投稿日時: 2005-11-30 11:15
シュンさん、かつのりさん大変勉強になりました!
教えていただいた方法で無事作成できました。 以下メソッドにしてみました。 また、0番目、4番目、7番目をキーにしてソートするように判定を追加
|
1