有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java比较链表和自定义链表的运行

这是一个家庭作业,并没有那么难,只是我的理解可能有缺陷

所以我有两个链表:双链表和一个自定义链表。我们只关心两个函数:void add()boolean contains()

MyLinkedList扩展了AbstractList,函数未被触及,但是自定义linkedList扩展了MyLinkedList,并且覆盖了contains()方法,这样在查找元素时,它将始终移动到列表的前面,您知道,以缩短更常用单词的查找时间

它还覆盖了add()方法,这样项目就不会添加到列表的后面,而是添加到列表的前面

我有一本字典。txt文件这是一个包含(~10000个单词)的字典

程序所做的是创建MyLinkedList对象和自定义linkedlist对象,并添加字典。txt将单词添加到相应的列表中。这意味着在MyLinkedList中,单词是按顺序排列的,而在CustomLinkedList中,单词是按相反顺序排列的

然后,程序会接收一个txt文件,例如《罗密欧与朱丽叶》。txt并遍历该txt文件的前10000个字(如果这些字与MyLinkedList对象中的字匹配),然后对自定义linkedlist对象执行单独的运行

Q:为什么自定义linkedlist one的运行速度比MyLinkedList快?我的答案是,由于自定义linkedlist将经常使用的搜索词移动到最前面,因此查找时间更短,因此它将比MyLinkedList运行得更快。我希望我的答案听起来不错,请随意改进

现在令人困惑的是,我们现在正在使用罗密欧和朱丽叶。txt作为字典文件本身,会发生以下情况:

即从最短时间到最长时间:

  1. 使用《罗密欧与朱丽叶》字典~80ms的我的链接列表

  2. 字典上的自定义列表。txt~160ms

  3. 字典上的MyLinkedList。txt~360ms

  4. 《罗密欧与朱丽叶》字典~390ms上的自定义列表

Q:为什么会这样?如果我们只使用故事中的单词作为字典的范围,为什么自定义linkedlist的速度较慢

另外,如果问题的任何部分不清楚,请随时告诉我,我将编辑我遗漏的任何内容


共 (1) 个答案

  1. # 1 楼答案

    由于自定义列表总是将单词添加到前面,因此字典的顺序将与阅读术语的顺序相反。对于普通的字典来说,这不会有太大的区别,但是当你使用《罗密欧与朱丽叶》这本书作为字典时,你最终会得到:

    Romeo and Juliet:“两个家庭,都有尊严……比朱丽叶和她的罗密欧更重要。”

    "两个","家庭","两个","相似","在","尊严",

    “罗密欧”、“她”、“和”、“朱丽叶”、“的”、“这个”、“比”

    因为您正在搜索R&;J按顺序,当您使用R&;J字典,第一个单词总是在第一个位置找到,第二个单词总是在第二个位置找到,依此类推,作为最差的查找,如果单词已经出现在游戏中,则查找速度更快

    这比在普通字典中查找每个单词要快得多


    现在让我们考虑一下当你开始搜索^ {< CD3>}时会发生什么。您要搜索的第一个单词是词典中的最后一个单词,如果它在游戏中出现多次,则更早。然而,与搜索MyLinkedList时相比,查找它肯定需要更长的时间。然后,更糟糕的是,你把那个词移到字典的前面,把第二个词的“已知”位置推到字典的最末端,就在你搜索它之前。当常用词(例如“a”、“the”、“and”)出现泡沫时,这会有所缓解,但它不会克服MyLinkedList搜索所具有的巨大优势