- - PR -
Javaでのsort処理について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-25 20:54
失礼しました。FileFilterではソートはできませんね。勘違いお許しください。
| ||||||||
|
投稿日時: 2005-07-27 11:12
LastModifiedComparator の equals メソッドは何のため? | ||||||||
|
投稿日時: 2005-07-27 14:14
要らないですね。
間違えました。すいません。 APIドキュメントの public boolean equals(Object obj) がちらっと目に入って、なんとなく書いてしまいました。 しかも引数間違っているし…恥ずかしい限りです。 | ||||||||
|
投稿日時: 2005-07-27 16:32
お話に割り込みます。
私がよくやるソートはTreeMapを利用します。 綺麗なアルゴリズムになるかわかりませんが、 ソートキーにしたいもの(今回は最終更新時間)をマップのキーにして、 値をFileオブジェクトにすると、 Map#keySet()でキー値を取った時に最終更新時間の順で並びます。 File dir = new File("C:\temp"); File[] files = dir.listFiles(); TreeMap map = new TreeMap(); for (int i = 0; i < files.length; i++) { // 最終更新日時をソートキーにしてマップに追加 map.put(String.valueOf(files[i].lastModified()), files[i]); } Iterator itr = map.keySet().iterator(); while (itr.hasNext()) { File f = (File) itr.next(); System.out.println("名前: " + f.getName() + " 時間: " + f.lastModified()); } 最終更新日時はLong値なので すべてのキー文字列の長さが同じになるように編集する必要はあります。 これよく使うんですけどどうでしょうかね? | ||||||||
|
投稿日時: 2005-07-27 17:17
その場合、重複するキーが発生する可能性がありますね。 | ||||||||
|
投稿日時: 2005-07-27 17:38
重複する時には // 最終更新日時とファイル名をソートキーにしてマップに追加 String key = files[i].lastModified()) + files[i].getName(); map.put(key, files[i]); のようにすると、最終更新日時+ファイル名の順でソートされます。 ソートキーの文字列の作成方法で ソートする条件はは殆ど自由に設定できると思います。 [ メッセージ編集済み 編集者: beco 編集日時 2005-07-27 17:39 ] [ メッセージ編集済み 編集者: beco 編集日時 2005-07-27 17:39 ] | ||||||||
|
投稿日時: 2005-07-27 18:07
重複を回避するためにはすべての重複可能性を判定する必要があります。
そのためにComparatorとを使う仕組みが用意されているわけでして。 そもそも私は「どうでしょうか」とあったのでコメントしたまでですよ。 | ||||||||
|
投稿日時: 2005-07-27 18:24
ちょうど昨日同じことを調べてました。
Collection#sortの方法は他の方が書いているので、 ソートアルゴリズムの実装のほうについて書きます。 JDKの demo/applets/SortDemo のディレクトリに バブルソートとクイックソートの実装例がありますよ。 |