首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有恒定时间访问和可变大小的数据结构

具有恒定时间访问和可变大小的数据结构
EN

Stack Overflow用户
提问于 2011-03-19 21:23:25
回答 4查看 10.9K关注 0票数 4

我在一次面试中被问到了这个问题。

是否有具有以下2种功能的数据结构:

1。恒定时间访问(随机访问),类似于ArrayList

2。可变大小,如LinkedList

如果没有这样的数据结构,请自己创建一个。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-19 21:38:43

我相信您正在寻找的答案是“哈希表”(见维基百科中的“哈希表”),因为您已经评论说,他们正在寻找ArrayList之外的另一个表(请参阅:哈希表)。

尽管要注意的是,它可以是接近恒定的时间,这取决于散列算法和数据集,因为可能会发生冲突,从而导致(短)次线性搜索。Javadoc很好地解释了如何在Java实现中处理这个问题。

票数 6
EN

Stack Overflow用户

发布于 2011-03-19 21:52:55

除了HashTable,正如布赖恩·罗奇所说,采访者可能暗示了LinkedHashMapLinkedHashSet,后者为一些基本操作提供了恒定的时间表现,同时也保持了插入顺序,因为它将HashTable与双链接列表结合在一起。

换句话说,如果在键上循环,将元素放入LinkedHashMap的顺序将与检索它们的顺序相同。

但是,使用集合的一个缺点是不能有重复的,而Maps也不能有重复的键。解决办法是拥有一组列表,或者使用类似Google的多机

但正如其他人所说,ArrayList已经满足了这两种要求。它是一个没有可变大小的数组

此外,与ArrayList的O(n)性能相比,LinkedList相对于ArrayList的主要优势是在列表的末尾和开头都有恒定时间插入/删除。两者都可以提供可变大小。

票数 3
EN

Stack Overflow用户

发布于 2011-03-19 22:20:02

http://en.wikipedia.org/wiki/Deque或者“双端队列”怎么样?在许多实现中,除了头或尾之外,对于任何位置的插入和删除,它都不会有效地改变大小,但它提供了所需的两个属性:

  • 添加元素时,只会偶尔进行最小的重新分配。
  • 固定时间访问,因为deque通常作为数组存储。

您在问题中提到了Java --作为标记--我必须指出,Java中的接口不提供随机访问。甚至连混凝土级都不提供它。这是一个不幸的选择,其目的是为了更抽象,并在接口上提出尽可能少的需求。

不管怎么说,除了Java之外,您还可以找到满足您所请求的属性的deque实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5364998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档