2012-03-22 42 views
1

我有一個字符串來源(讓我們說,一個文本文件)和許多字符串重複多次。我需要按照出現次數減少的順序獲取頂部X最常見的字符串。比較TreeBag按發生次數排序

浮現在腦海的第一個想法是創建一個排序包(類似org.apache.commons.collections.bag.TreeBag),並提供一個比較,將在我需要的順序排序條目。但是,我無法弄清楚我需要比較哪些類型的對象。它應該是某種內部映射,它結合了我的對象(String)和由TreeBag在內部生成的出現次數。這可能嗎?

不然我就只需使用一個HashMap更好和描述,例如,通過值排序,Java sort HashMap by value

回答

0

你爲什麼不把字符串中的地圖。字符串映射到它們在文本中出現的次數。 在步驟2中,遍歷地圖中的項目並繼續將它們添加到大小爲X的最小堆中。如果在插入之前堆已滿,則始終首先提取最小值。
需要nlogx時間。

否則,在步驟1之後按出現次數對項目進行排序並取前x個項目。一個樹形圖將在這裏有所幫助:)(我會添加一個鏈接到javadocs,但我在平板電腦上) 需要nlogn時間。

+1

謝謝阿德里安。我最終實現了它作爲一個可排序的散列表,但堆是一個不錯的主意 - 下一次我會看看像自定義比較器的PriorityQueue。 – AlexR 2012-03-24 04:01:29