代码之家  ›  专栏  ›  技术社区  ›  roxrook

JFC的HashMap和TreeMap之间的时间复杂度?

  •  2
  • roxrook  · 技术社区  · 14 年前

    据我所知,

    TreeMap :
    1. Insert O( logN )
    2. Delete O( logN )
    3. Retrieve O( logN )
    HashMap :
    1. Insert O( 1 ) -> O( N )
    2. Delete O( 1 ) -> O( N )
    3. Retrieve O( 1 ) -> O( N )
    

    我知道树映射使用红黑树作为内部数据结构。但是,我不太确定HashMap的内部数据结构。

    1. HaspMap是使用
    2. 如果答案是“是”,那么它是否使用array base的实现
    3. 如果它使用数组基,那么它是排序的还是未排序的?

    1插入10000个元素 2删除100个元素 三。检索100个元素

    我得到这个信息:

         HashMap
    Create time : 6348015 nano seconds.
    Remove time : 98458 nano seconds.
    Retrieve Found time : 59762 nano seconds.
    Retrieve Not Found time : 39097 nano seconds.
     --- end ---
    
         TreeMap
    Create time : 20518163 nano seconds.
    Remove time : 274221 nano seconds.
    Retrieve Found time : 112072 nano seconds.
    Retrieve Not Found time : 168442 nano seconds.
     --- end ---
    

    这个结果让我很惊讶,因为我一直认为TreeMap会比HashMap差很多。有人能给我简单解释一下这些事情吗?提前谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   svick Raja Nadar    14 年前

    如果你想展示一些操作的复杂性,你不能只使用一个数据点,你必须展示时间是如何变化的 N 变化。

    而且,对于较小的数据集,理论复杂度较高的算法或数据结构的运行时间往往较短。

    1, 2, 3, … 在RB树中,这是最坏的情况(我认为),因为它必须经常重新平衡。插入随机值可能会得到不同的结果。

        2
  •  0
  •   James    14 年前

    我在youtube上看过一些视频,通过动画和图表来解释不同的排序算法。还要注意的是,大哦是 运行时间,所以您可能需要操纵它,以便命中最坏的情况来突出差异。

    我认为一个简单的图表最好,时间在y轴上,元素的数量在x轴上。