关于java:TreeBag的比较器,按出现次数排序

Comparator for TreeBag to sort by the number of occurrences

我有一个字符串源(比如,一个文本文件),许多字符串重复多次。我需要按出现次数减少的顺序得到最常见的x个字符串。

首先想到的想法是创建一个可排序的包(比如org.apache.commons.collections.bag.treebag),并提供一个比较器,按照我需要的顺序对条目进行排序。但是,我无法确定需要比较的对象类型。它应该是一种内部映射,结合了我的对象(字符串)和Treebag内部生成的出现次数。这有可能吗?

还是通过简单地使用一个哈希映射并按值排序它,比如说,按值排序Java排序哈希表,我会更好吗?


有了番石榴的TreeMultiset,只需使用Multisets.copyHighestCountFirst


你为什么不把绳子放在地图上呢?字符串映射到它们在文本中出现的次数。在步骤2中,遍历映射中的项,并继续将它们添加到最小大小为x的堆中。如果堆已满,则始终先提取min,然后再插入。需要nlogx时间。

否则,在步骤1之后,按出现次数对项目排序,并取前x个项目。树图在这里会很有帮助:(我会添加到javadocs的链接,但我在平板电脑中)需要重新登录时间。