当前位置: 首页 > 知识库问答 >
问题:

比较链表和自定义链表的运行情况

吴举
2023-03-14

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

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

MyLinkedList扩展了AbstractList,函数未被触及,但自定义linkedList扩展了MyLinkedList并重写了contains()方法,这样在查找元素时,它总是会移动到列表的前面,以缩短更常用单词的查找时间。

它还重写add()方法,使项目不会添加到列表的后面,而是添加到列表的前面。

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

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

然后,该程序接收一个txt文件(例如romeo-and-juliet.txt),并遍历该txt文件的前10000个单词,如果这些单词与MyLinkedList对象中的单词匹配,并为自定义Linkedlist对象单独运行。

问:为什么自定义LinkedList比MyLinkedList运行得更快?我的答案是,由于自定义的LinkedList将常用的搜索词移到前面,查找时间更短,所以它比MyLinkedList运行得更快。我希望我的答案听起来不错,请随意改进。

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

i、 e.从最短时间到最长时间:

>

  • MyLinkedList使用romeo-and-juliet字典~80ms

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

    MyLinkedListdictionary.txt~360ms

    罗密欧与朱丽叶词典上的自定义列表~390ms

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

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

  • 共有1个答案

    汤嘉平
    2023-03-14

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

    罗密欧和朱丽叶:“两个家庭,在尊严上都一样……比朱丽叶和她的罗密欧更重要。”

    MyLinkedList:"两个","家庭","两者","相似","在","尊严",...

    自定义列表:“罗密欧”、“她”、“和”、“朱丽叶”、“的”、“这个”、“比”。。。

    因为您正在搜索R的文本

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

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

     类似资料:
    • 问题内容: 我知道有几个这样的问题,但是它们似乎对我没有用。 我有一个列表,5元素乘以50。我想通过对每个元素应用自定义比较功能来对列表进行排序。此函数计算要对元素进行排序的列表的适用性。我创建了两个函数,比较和适应性: 和 然后我尝试通过以下方式致电给他们: 要么 要么 要么 我也尝试了具有相同参数的list.sort()。但是无论如何,函数都不会将列表作为参数,而是作为参数。我不知道为什么,这

    • 获取系统emoji表情,实现表情键盘,输入框能够随着输入文字的长度而自动增长,模仿微信键盘,能够切换文字键盘和表情键盘。 [Code4App.com]

    • 我有两个包含该类对象的列表: 我想通过学生比较一下那两个列表中的对象。我得比较一下列表然后得到下面的数据 我需要创建一个新列表,其中包含中存在但不在中的 对象 我需要创建一个新列表,其中包含那些对象,这些对象存在于中,但不存在于中 我需要创建一个新列表,其中包含使用java8流出现在两个列表中的对象 我尝试使用下面的代码 查找获得TC的学生(存在于列表1中但不存在于列表2中) 查找新的许可(存在于

    • 在今天的一次采访中,我被问到了这个问题。 除了回答倒序和前后遍历外,面试官还不断强调其中的一些“基本点”。我放弃了,当然在面试后做了一些调查。在双链表中插入和删除似乎比单链表更有效。我不太清楚如何才能更有效地使用双链接列表,因为显然需要更改更多的引用。有人能解释背后的秘密吗?老实说,我做了相当多的研究,但未能理解我的主要问题是,仍然需要对双链接列表进行O(n)搜索。

    • 本文向大家介绍双向链表和双向循环链表?相关面试题,主要包含被问及双向链表和双向循环链表?时的应答技巧和注意事项,需要的朋友参考一下 双向链表: 包含两个指针,一个prev指向前一个节点,一个next指向后一个节点。 双向循环链表: 最后一个节点的 next 指向head,而 head 的prev指向最后一个节点,构成一个环。

    • 问题内容: 假设我有一对班 我希望先按第一个值排序,然后再按第二个值排序。现在,如果我这样做 一切正常,列表按对的第一个值排序,但是如果我这样做 它因错误而失败 好的,所以它可能无法推断参数,所以如果我这样做 它因错误而失败 为什么它对compare()而不是compare()。thenComparing()有效? 问题答案: 该错误似乎与的通用参数有关。一种解决方法是尝试使用显式类型: 请注意,