Java 树状图的比较器,用于按出现次数排序

Java 树状图的比较器,用于按出现次数排序,java,comparator,bag,Java,Comparator,Bag,我有一个字符串源(比如说,一个文本文件)和许多重复多次的字符串。我需要按出现次数减少的顺序获得前X个最常见的字符串 首先想到的想法是创建一个可排序的包(类似org.apache.commons.collections.Bag.TreeBag)并提供一个比较器,它将按照我需要的顺序对条目进行排序。但是,我无法确定需要比较的对象类型。它应该是某种内部映射,它结合了我的对象(字符串)和树型图在内部生成的出现次数。这可能吗 或者我只需使用hashmap并按值对其进行排序就更好了,例如,为什么不将字符串放

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

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


或者我只需使用hashmap并按值对其进行排序就更好了,例如,

为什么不将字符串放在映射中呢。将字符串映射到它们在文本中出现的次数。 在步骤2中,遍历映射中的项目,并继续将它们添加到大小为X的最小堆中。如果堆已满,则在插入之前始终先提取min。
需要花费大量的时间

否则,在步骤1之后,按出现次数对项目进行排序,并取前x个项目。树图在这里会很有用:)(我想添加一个指向javadocs的链接,但我在平板电脑中)
需要很长时间。

使用,只需使用。

谢谢Adrian。我最终将其实现为一个可排序的hashmap,但heap是一个不错的主意——下次我将研究类似PriorityQueue和CustomComparator的东西。