在我的一次面试中,我被问到了这个问题。
是否有一种数据结构具备以下两个功能:
1. 像ArrayList一样具有常数时间访问(随机访问)的能力。
2. 具有可变大小的能力,就像LinkedList一样。
如果没有这样的数据结构,请自己创建一个。
在我的一次面试中,我被问到了这个问题。
是否有一种数据结构具备以下两个功能:
1. 像ArrayList一样具有常数时间访问(随机访问)的能力。
2. 具有可变大小的能力,就像LinkedList一样。
如果没有这样的数据结构,请自己创建一个。
ArrayList 之外的另一个答案(对于Java,请参阅:哈希表)。
但请注意,它可以是近似常数时间,具体取决于哈希算法和数据集,因为可能会发生冲突,导致(短暂的)二次线性搜索。 Javadoc非常好地解释了Java实现中如何处理这个问题。
你听说过deque吗?它是一种“双端队列”。在许多实现中,它对于除了头部或尾部之外的任何位置的插入和删除都不会有效地改变大小,但它提供了你所需的两个属性:
你在问题中提到了Java,我必须指出,在Java中,Deque
接口并没有提供随机访问。即使ArrayDeque
具体类也没有提供它。这是一个不幸的选择,为了更抽象化,并尽可能少地对接口施加要求。
无论如何,在Java之外,你会发现deque实现确实满足你所请求的属性。