アプリ版:「スタンプのみでお礼する」機能のリリースについて

 いつもお世話になっています。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です。事情により返答が遅れてしまうかもしれませんが、どうぞ宜しくお願い致します。

A 回答 (3件)

java5 なら typesafe ENUM で順列も記述順でcompareTo が使えるそうなんですが。


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

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

お礼日時:2007/05/08 21:28

一つの案ですが。

compareメソッドで、

String checkdata = "ONE TWO THREE FOUR FIVE...以下略...";

みたいなStringを用意しておき、indexOfで最初に登場する位置のint値を調べて比較する、というのはいかがでしょう?
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/05/08 21:26

(私が知らないだけの可能性がありますが)総当りしかないと思いますがどこまで対応するかですよね。


1桁だけであれば、文字→数値の割り当てメソッドをさくっと作って
Comparator実装クラスでcompareすれば良いと思います。
無限大まで対応するとなると、現実的ではないのでは?
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/05/08 21:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!