• ベストアンサー

ArrayListなどのソート

 いつもお世話になっています。ArrayListなどをソートする際に、Comparatorインターフェースを実装したクラスを利用して、辞書順や数値順などでソートすることは出来ますよね。これを任意の単語の順番にソートするにはどのようにすればよいのでしょうか。つまり、下記例において、文字列順ではなくて、"ONE", "TWO", "THREE", "FOUR"の順番にソートしたいのです。 ArrayList list = new ArrayList(); list.add("THREE"); list.add("ONE"); list.add("FOR"); list.add("TWO");  やはりcompare()メソッド内で総当り的に比較するしかないのでしょうか。  開発環境はJDK1.4です。事情により返答が遅れてしまうかもしれませんが、どうぞ宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

java5 なら typesafe ENUM で順列も記述順でcompareTo が使えるそうなんですが。 1.4であれば、hash map のキーに文字列、値に順列値(int)を定義しておいて、キーから値を取り出しての比較というのはどうですか? 最初に定義したもの以外は比較できないのは、No3で御提唱の、indexofと根本的には変わらないかもしれませんが。 メモリーと速度問題でどちらをとるかといったところかな。

Theophrastos
質問者

お礼

 ご返答ありがとうございます。typesafe ENUMとは初耳です。Java 5.0は利用できませんが、調べてみようと思います。  StringでindexOfを利用するのと、HashMap等を利用するのではどちらが効率的なのかは調査してみないといけませんね。

その他の回答 (2)

noname#49664
noname#49664
回答No.2

一つの案ですが。compareメソッドで、 String checkdata = "ONE TWO THREE FOUR FIVE...以下略..."; みたいなStringを用意しておき、indexOfで最初に登場する位置のint値を調べて比較する、というのはいかがでしょう?

Theophrastos
質問者

お礼

 ご返答ありがとうございます。確かにこうした方法も出来そうですね。ただ毎回Stringを検索するのでパフォーマンスが若干気になります。

noname#33813
noname#33813
回答No.1

(私が知らないだけの可能性がありますが)総当りしかないと思いますがどこまで対応するかですよね。 1桁だけであれば、文字→数値の割り当てメソッドをさくっと作って Comparator実装クラスでcompareすれば良いと思います。 無限大まで対応するとなると、現実的ではないのでは?

Theophrastos
質問者

お礼

 ご返答ありがとうございます。確かに総当りが最も順当な手段ですが、仕様変更など際に手間がかかりそうです。また、多くても十数件くらいまでしか、現実的には出来そうにないです。

関連するQ&A