说明 | 一个 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
使这变得非常简短,这对我很有吸引力。我怀疑如果性能确实是一个问题,那么可能有比 TreeMap
或 HashMap
更好的攻击方法 :)
关于java - 您将使用哪种数据结构 : TreeMap or HashMap? (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/302371/