2012-03-22 7 views
1

私は文字列のソースを持っています(テキストファイルと言う)。多くの文字列は複数回繰り返します。出現回数の多い順に上位のX個の文字列を取得する必要があります。最初に頭に浮かんだTreeBagの比較器が出現数でソートする

アイデアは、ソート可能なバッグ(org.apache.commons.collections.bag.TreeBagのようなもの)を作成し、私が必要とするために、エントリをソートしますコンパレータを提供することでした。しかし、私は比較する必要のあるオブジェクトの種類が何であるかわかりません。これは、自分のオブジェクト(String)とTreeBagによって内部的に生成された出現回数を組み合わせた何らかの内部マップでなければなりません。これは可能ですか?

または私は例えば、Java sort HashMap by value

答えて

0

は、なぜあなたはマップ内の文字列を入れていない、単にハッシュマップを使用して、したほうが良いとに記載されているような値で、それをソートします。文字列をテキストに表示する回数。 ステップ2で、マップ内の項目をトラバースし、最小サイズのヒープにXを追加し続けます。挿入する前にヒープが一杯になっている場合は、常に最初に抽出します。
nlogx時間かかります。

それ以外の場合は、手順1の後に出現数で項目をソートし、最初のx項目を取ります。ツリーマップはここで役に立つだろう:)(私はjavadocsへのリンクを追加したいが、私はタブレットにいる) nlognの時間がかかる。

+1

ありがとう、アドリアン。ソート可能なハッシュマップとして実装することになりましたが、ヒープは良いアイデアです。次にカスタムコンパレータでPriorityQueueのようなものを調べます。 – AlexR

関連する問題