我在接受采访时被问到这个问题。我认为这个问题过于通用,无法指定特定的数据结构。
但是,如果我们将问题通道化为以下标准,那么最好使用哪种数据结构:
答案 0 :(得分:6)
HashSet
提供O(1)插入和O(1)搜索,从理论的角度来看很难超越。
实际上,对于大小为10.000的引用,排序的ArrayList
可能仍然优于HashSet
,尽管插入为O(n)且搜索为O(log(n))。为什么?因为它将数据(至少是引用)存储在连续的内存范围内,因此可以利用硬件内存缓存。
big-O表示法的问题在于它完全忽略了单个操作所需的时间。对于渐近考虑和非常庞大的数据集来说这很好,但是对于10.000的大小,这可能会产生误导。
但是,哈文没有尝试过。而且我打赌你的面试官也没有:)。