当前位置: 首页 > 面试题库 >

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

经骁
2023-03-14
问题内容

描述 一个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以自然键顺序进行迭代。

编辑:我认为康拉德的评论可能是在暗示“先使用HashMap,然后进行排序”。这很好,因为尽管最初我们将进行N次迭代,但由于重复,最终我们将拥有K <=
N个键。我们最好将昂贵的位(排序)保存到最后,那时我们得到的键要少得多,而不是随我们去对它进行排序,但是要获得很小但不是很恒定的命中。

话虽如此,我暂时坚持我的回答:因为这是实现目标的 最简单
方法。我们真的不知道OP特别担心性能,但是这个问题意味着他担心优雅和简洁。使用TreeMap,这简直令人难以置信,这吸引了我。我怀疑,如果性能是一个真正的问题,有可能是攻击它比任何一个更好的方式TreeMapHashMap:)



 类似资料:
  • 问题内容: 何时使用哈希图或树图? 我知道可以在需要对元素进行排序时使用TreeMap对其进行迭代。只是吗?当我只想查阅地图或某些最佳特定用途时,没有优化? 问题答案: 哈希表(通常)执行搜索操作(查找),其复杂度限制为,平均情况复杂度为;但是,二进制搜索树(BST)执行搜索操作(查找),其复杂度限制为,平均情况复杂度为。(您自己)应该了解每个(每个)数据结构的实现,以了解其优缺点,操作时间复杂度

  • 问题内容: MySql中使用哪种数据结构? 问题答案: 可能很多,但从B树开始。

  • 我需要使一个程序,计数频率的每一个字在一个文本,另外,我需要能够返回一个列表的n个最经常的字(如果更多的字有相同的频率,他们排序的字母顺序)。还有一个单词列表是不被计算的(停止单词)。 停用词用什么结构 我认为HashSet是最有效的 HashMap添加单词的效率更高,但需要排序,TreeMap插入单词需要logn时间,但单词可以按频率排序 总体而言,什么方法更有效? 附言。@主持人我知道有一个类

  • 问题内容: 我当前正在从文本文件中读取200万行,如上一个问题中所述 。Java读取200万行文本文件的最快方法 现在,我将这些信息存储到HashMap中,并希望通过TreeMap对其进行排序,因为我想使用ceilingkey。以下方法正确吗? 问题答案: HashMap hashMap = new HashMap (); TreeMap treeMap = new TreeMap (); tre

  • 问题内容: 我想写一个程序来评估给定整数的阶乘。 根据基本知识,我在java中编写了以下代码: 但是后来我意识到,对于许多整数输入来说,结果可能不是所希望的,因此对于测试,直接将输入设为100。 我的怀疑是正确的,因为我得到的结果为“ 0”(因为结果可能超出了很长的范围)。 因此,我只是好奇并渴望知道如何使我的程序在输入<= 150的情况下工作。 我将感谢使用C编程语言或Java的任何有效解决方案

  • 问题内容: 在Oracle pl / sql中,有没有一种方法可以创建像java Hashmap这样的数据结构,它可以将记录类型作为值,将String作为索引。 例如; 我希望能够做到以下几点 能做到吗?我不能使用嵌套表,因为我只能按整数对其进行索引。对于关联数组,我不能将对象类型用作属性。 也希望这样做而不必创建对象或架构数据类型。你能建议点什么吗? 问题答案: 在PL / SQL中,您可以定义