- - PR -
Javaでのsort処理について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-14 18:04
Javaでのsort処理について教えて頂きたいことがあります。
Javaで提供されているクラスで、重複のキーを許すような配列 を格納出来るクラスなるものは存在するのでしょうか? 下記のような処理を行いたいと思っています。 @ Hashtableで、aHash_、bHash_を作成。 A aHash_には、キー=A、B、Cでデータを格納 B bHash_には、キー=A、Cでデータを格納 aHash_とbHash_でキーでマッチングさせて、データを合算して、 最終的にはcHash_でキーで昇順にデータを並べ変えたいのです。 プログラムではよくある処理と思うのですが、調べたところ、 MapやArraysでは上記の処理を効率良く処理できなそうです。 どなたかご存知の方がいらっしゃいましたら、ご教示お願い 致します。 _________________ | ||||||||||||
|
投稿日時: 2005-04-14 18:41
Jakarta-Commons-Collections に、J2SEが標準で提供していないコレクション実装が あるので、そこを調べられてはどうでしょう? ちょっと見た感じでは、MultiMap等は使えるかもしれません。 (sekiさんの処理イメージとは若干異なりそうですが...) あるいは、キーの重複を許すのではなく、複数の値を格納できるようにする方法もあると思います。 簡単な例で言えば
のような感じです。。。 ただ、個人的にはコレクションをネストする(上記のようにMapの中にListを入れる等)は コードが煩雑なってあまり良くないかと思います。 より良い方法としては、複数の値を保持できるようなシンプルなオブジェクトを 作っても良いかもしれません。 | ||||||||||||
|
投稿日時: 2005-04-14 18:58
YOU@ITさん
アドバイスありがとうございます。 ファイルマッチング処理の1:N、N:Nのような事をJavaでやりたい だけなのですが、どうもJavaは処理したいなぁ、と思うメソッド などが用意されていなかったりして困っています。 (やはり自分で作らなければならないものなのでしょうか? 自分で作るとパフォーマンスが気になります。) オブジェクト志向言語になじみが薄く、もう少し調べてみます。 ヒント等ありましたらお願い致します。 _________________ | ||||||||||||
|
投稿日時: 2005-04-16 16:11
unibon です。こんにちわ。
私には、どういう並べ替えを要求されているのかがイマイチ良く見えません。 Java なら Comparable(か Comparator のどっちか)を implements すれば、sort の順序を自由に制御できるはずですが、要は Comparable の実装をどうしたら良いか、という話でしょうか? http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Arrays.html#sort(java.lang.Object[],%20java.util.Comparator) だとしたら、クラスのフィールドになにがあって、それを使ってどういう順序を望まれているのかを、もう少し細かく提示されたほうが良いかもしれません。
配列やListなら重複はいくらでも許されます。Set だと、equals の実装で重複かどうかが決まりますが、これはソートのキーとは違わせるkとおもできます。もっとも、後述のように Set の要素をソートすることってあんまりやらないです。
Hashtable というのが良く分かりません。Hashtable だとすなわち Set なので、これだと順序を保持することは、あまりやりません(SortedSet とかはあるみたいですが)。
1:N や N:N が良く分かりません。 | ||||||||||||
|
投稿日時: 2005-04-16 17:44
unibon です。こんにちわ。
型が混在したソートということなら、つぎのような感じかもしれません。
ただ、Hashtable のような Map だと key と value を分けますが、Collections.sort の対象となるようなクラスだと key と value をひとつのクラスにまとめてしまうことが多いようです。このあたりはソートの本質ではありませんが、クラス設計の際はとまどいます。Comparable と Comparator の両方があるのと理屈は同じかもしれません。 [ メッセージ編集済み 編集者: unibon 編集日時 2005-04-16 17:45 ] |
1