我有一个字符串来源(比方说,一个文本文件),许多字符串重复多次。我需要按照出现次数减少的顺序得到前X个最常见的字符串。
首先想到的想法是创建一个可排序的Bag(类似于 org.apache.commons.collections.bag.TreeBag )并提供一个比较器,它将按顺序对条目进行排序我需要。但是,我无法弄清楚我需要比较的对象类型是什么。它应该是某种内部映射,它结合了我的对象(String)和TreeBag内部生成的出现次数。这可能吗?
或者我会通过简单地使用散列图并按值排序来改善,例如,Java sort HashMap by value
答案 0 :(得分:0)
为什么不把字符串放在地图中。字符串映射到它们在文本中出现的次数。
在步骤2中,遍历地图中的项目并继续将它们添加到大小为X的最小堆中。如果在插入之前堆已满,请始终先提取min。
需要nlogx时间。
否则,在步骤1之后,按出现次数对项目进行排序,并取出前x个项目。树图会在这里有用:)(我会添加一个链接到javadocs,但我在平板电脑中) 需要时间。
答案 1 :(得分:0)