Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures 为什么链表几乎总是与单独的链接一起使用?_Data Structures_Vector_Hashtable_Linked List - Fatal编程技术网

Data structures 为什么链表几乎总是与单独的链接一起使用?

Data structures 为什么链表几乎总是与单独的链接一起使用?,data-structures,vector,hashtable,linked-list,Data Structures,Vector,Hashtable,Linked List,似乎每次我在哈希表中看到单独的链接时,都会使用链表作为数据结构来存储有冲突的项。为什么会这样?例如,为什么不能使用向量/数组数据结构?如果有一个对象向量,那么复制对象可能会很昂贵,因此大多数通用哈希表都使用链表,不需要在删除或插入时进行复制。然而,在大多数代码中,从哈希表中删除实际上是一个非常罕见的操作,插入应该很少(您不希望增加长链),因此每当我自己实现哈希时,我总是使用向量来表示链,绝对没有问题 另一种解释是,链表是人们盲目获取的容器——有关这方面的更多意见,请参阅我的博客评论。您可以使用v

似乎每次我在哈希表中看到单独的链接时,都会使用链表作为数据结构来存储有冲突的项。为什么会这样?例如,为什么不能使用向量/数组数据结构?

如果有一个对象向量,那么复制对象可能会很昂贵,因此大多数通用哈希表都使用链表,不需要在删除或插入时进行复制。然而,在大多数代码中,从哈希表中删除实际上是一个非常罕见的操作,插入应该很少(您不希望增加长链),因此每当我自己实现哈希时,我总是使用向量来表示链,绝对没有问题


另一种解释是,链表是人们盲目获取的容器——有关这方面的更多意见,请参阅我的博客评论。

您可以使用vector/ArrayList,但:

  • 您不需要ArrayList提供的链接列表所没有的任何功能,例如在O(1)时间内索引到列表中
  • ArrayList的容量往往大于其当前长度,这会浪费内存
  • ArrayList需要偶尔增加其容量,这很慢

您能告诉我您具体谈论的是哪篇博客文章吗?我很想听到更多关于这方面的信息。扮演魔鬼代言人:a)你不需要插入列表的能力。b) 指针需要在插入元素时更新,这很慢。c) 由于指针的开销,链表总是大于相同大小的数组列表,这会浪费内存。b)更新链表时,只需更新一个或两个指针。更新arraylist时,必须更新指针和计数,因此这里没有真正的保存。c) 只有当数组列表中没有额外的容量时才是这样,即使这样,对于只有一个元素的列表也不是这样。@MarkByers你好,mark,我有一个问题。我们最好让负载因子为1,但是这样,哈希表中的每个LinkedList只能包含一个元素,我知道每个LinkedList的目的都是为了解决冲突问题,但我不明白为什么在当前元素大小大于原始表大小的情况下需要重新刷新这样的表?为什么我们不能在每个LinkedList中存储更多元素?如果您能帮助我,谢谢您!