Java - 最适合查找最常用元素的数据结构

时间:2013-01-29 23:35:12

标签: java string data-structures

我的程序包含输出文本(String)的算法。最终我想打印出最多发生的单词。但在此之前,我需要将其存储在数据结构中。所以我想知道什么数据结构是最好的(简单而有效)存储字符串然后能够获得最频繁的元素?我不想使用任何库。感谢

4 个答案:

答案 0 :(得分:3)

我认为没有任何数据结构可以做到这一点,但我会这样做。

将每个单词的Map<String, Integer>保持为遇到的次数,并在更新地图时跟踪对应于存储的最大数字的字符串。例如:

String maxWord = null;
Integer maxCount = -1;
Map<String, Integer> wordCount = new HashMap<String, Integer>();
for (String str : getMyProgramOutput()) {
  if (!wordCount.containsKey(str)) { wordCount.put(str, 0); }
  int count = wordCount.get(str) + 1;
  if (count > maxCount) {
    maxWord = str;
    maxCount = count;
  }
  wordCount.put(str, count);
}

答案 1 :(得分:1)

创建Map<String, Integer>。每次您输入String增量Integer(您可能需要创建自己的MutableInteger课程。当您完成搜索(或保持正在运行的计数)

答案 2 :(得分:1)

为什么不构建一个最大堆,每个节点中都有Stringinteger_occurrence。要获得最常用的单词,请获取堆的根

答案 3 :(得分:0)

你可能想考虑在DB中使用字典。因为这些数据通常必须持久保存到物理介质中,以防止系统重启后丢失。在这种情况下,字典是有帮助的。您唯一需要做的就是设置一个字典表和其他表来存储频率和位置等信息。