java - 如何获取给定文本中 N 个最常用的单词,从最大到最小排序?

标签 java sorting dictionary cpu-word alphabetical

我收到了一个大文本作为输入。我制作了一个 HashMap,将每个不同的单词存储为键,并将出现的次数存储为值(整数)。

现在我必须创建一个名为 mostOften(int k):List 的方法,该方法返回一个列表,该列表给出从最大出现次数到最小出现次数的前 k 个单词(降序排列) )使用我之前制作的HashMap。 问题是,只要两个单词出现次数相同,就应该按字母顺序对它们进行排序。

我想到的第一个想法是交换给定 HashMap 的键和值,并将其放入 TreeMap 中,TreeMap 将按键对单词进行排序(整数 - 单词出现的次数),然后弹出TreeMap 中的最后/第一个 K 条目。

但是当2个或3个单词的数量相同时,我肯定会发生冲突。我将按字母顺序比较单词,但我应该输入什么整数作为第二个单词的键。

有什么想法如何实现这个或其他选项吗?

最佳答案

提示:

  1. 查看 javadoc 中的 Collections.sort 方法...这两个方法!

  2. 查看 Map.entries() 的 javadoc。

  3. 考虑如何实现一个Comparator,用于将类的实例与两个字段进行比较,当另一个字段比较相等时,使用第二个字段作为“决胜局”。

关于java - 如何获取给定文本中 N 个最常用的单词,从最大到最小排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20453629/

相关文章:

java - java中FTPClient类的问题

java - StringTokenizer 在字符串末尾读取 "\n "

php - 在 Mysql 中构建标签搜索引擎 - 排序问题

algorithm - 查找最近和最近的帖子,限制 20

java - 使用java仅相对于第一行按升序对二维数组进行排序

c# - 如何正确处理向字典添加新项目?

dictionary - Prolog:如何将字典的负索引转换为最大索引的正后继者?

c# - 如何通过从其他表单获取值来重置用户控件

c# - 可以在 C# 4.0 中创建多类型 lambda 函数的单一多类型集合吗?

java - ReloadingCombinedConfigurationBuilder 在 1 次重新加载后未重新加载