在java中存储10000条记录的最佳数据结构

在java中存储10000条记录的最佳数据结构,java,algorithm,data-structures,Java,Algorithm,Data Structures,我在采访中被问到这个问题。我认为这个问题太笼统,无法指定特定的数据结构 但是,如果我们将问题引导到以下标准,那么使用什么样的数据结构才是最好的: 插入速度是否应该最快 如果要以最快的速度搜索特定数据 HashSet既提供了O(1)插入,也提供了O(1)搜索,这从理论上讲很难做到最好 实际上,对于10.000个引用的大小,排序的ArrayList可能仍然优于HashSet,尽管插入是O(n),搜索是O(log(n))。为什么?因为它将数据(至少是引用)存储在一个连续的内存范围内,因此可以利用硬件内

我在采访中被问到这个问题。我认为这个问题太笼统,无法指定特定的数据结构

但是,如果我们将问题引导到以下标准,那么使用什么样的数据结构才是最好的:

  • 插入速度是否应该最快
  • 如果要以最快的速度搜索特定数据

  • HashSet
    既提供了O(1)插入,也提供了O(1)搜索,这从理论上讲很难做到最好

    实际上,对于10.000个引用的大小,排序的
    ArrayList
    可能仍然优于
    HashSet
    ,尽管插入是O(n),搜索是O(log(n))。为什么?因为它将数据(至少是引用)存储在一个连续的内存范围内,因此可以利用硬件内存缓存

    big-O表示法的问题在于它完全忽略了单个操作所需的时间。对于渐近性的考虑和非常庞大的数据集来说,这是很好的,但是对于10.000的大小来说,这可能是误导性的


    不过我还没试过。我打赌你的面试官也没有:)。

    看一看。你会在那里找到答案。通常他们可能希望你提出更多的问题来澄清他们的问题,比如-你想用这些记录做什么?数据集很少更改-主要是读取?数据集确实插入和删除了很多?对于更快的插入-链表,对于更快的搜索-二进制搜索树,哪一个更重要?根据[bigocheatsheet.com/],哈希表对于O(1)的搜索插入删除最快。那么为什么不每次都使用哈希表来存储任何内容呢???@user2713255:因为哈希表不能保证枚举顺序,所以哈希表需要比列表或数组多得多的空间,而且通常不能按位置索引哈希表。哈希表是一个很好的工具,但它不是瑞士军刀。