java - 您将使用哪种数据结构 : TreeMap or HashMap? (Java)

标签 java data-structures map hashmap treemap

说明 | 一个 Java 程序,用于读取文本文件并按字母顺序打印每个唯一单词以及该单词在文本中出现的次数。

程序应该声明一个 Map<String, Integer> 类型的变量。存储单词和相应的出现频率。但是,哪种具体类型? TreeMap<String, Number>HashMap<String, Number> ?

输入应转换为小写。

单词不包含以下任何字符:\t\t\n]f.,!?:;\"()'

示例输出 |

 Word            Frequency
  a                 1
  and               5
  appearances       1
  as                1
         .
         .
         .

备注 | 我知道,我已经在 Perl 中看到了用大约两行代码来解决这个问题的优雅解决方案。但是,我想在 Java 中看到它。

编辑:哦,是的,使用其中一种结构(在 Java 中)显示实现会很有帮助。

最佳答案

TreeMap对我来说似乎很容易 - 仅仅是因为“按字母顺序”的要求。 HashMap 迭代时没有排序; TreeMap 按自然键顺序迭代。

编辑:我认为 Konrad 的评论可能是建议“使用 HashMap,然后排序”。这很好,因为虽然我们最初会有 N 次迭代,但由于重复,我们最终会有 K <= N 个键。我们不妨将昂贵的部分(排序)保存到最后,当我们得到更少的键时,而不是在进行时保持排序的小但非恒定的打击。

话虽如此,我暂时坚持我的答案:因为这是实现目标的最简单方式。我们真的不知道 OP 特别担心性能,但这个问题暗示他关心优雅和简洁。使用 TreeMap 使这变得非常简短,这对我很有吸引力。我怀疑如果性能确实是一个问题,那么可能有比 TreeMapHashMap 更好的攻击方法 :)

关于java - 您将使用哪种数据结构 : TreeMap or HashMap? (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/302371/

相关文章:

algorithm - 实现 PriorityQueue 算法

android - 什么是 map 瓦片?

c++ - 如何将指针映射公开为 const 指针映射?

java - 添加列到连接表?

java - dropwizard 应用程序中的配置更改以与 React browserHistory 配合使用

java - 这两种基因型之间的差异

f# - 是在 F# map 上进行迭代还是设置有序遍历?

java - 运行时的 MapActivity ClassDefNotFoundException

algorithm - 函数式语言中的等价类和联合/查找

java - 一种有效索引数千个移动点的数据结构?