【问题标题】:Is efficiency of java's TreeMap based on number of keys or values?java的TreeMap的效率是基于键或值的数量吗?
【发布时间】:2012-07-24 13:35:18
【问题描述】:

由于 Java 使用红黑树来实现 TreeMap 类,所以 put() 和 get() 的效率是 lg(N),其中 N = 不同键的数量,或者 N = 你插入/检索的数量打算做什么?

例如说我想用一个

TreeMap<Integer, ArrayList<String>>

存储以下数据:

100 万个 对和 100 万个 对(字符串被插入到 key 对应的 arraylist 值中)

最终的树形图将有 2 个键,每个键存储数百万个“bob”或“jack”字符串的数组列表。时间效率是 lg(2mil) 还是 lg(2)?我猜它是 lg(2),因为这就是红黑树的工作原理,但只是想检查一下。

【问题讨论】:

    标签: java performance tree treemap


    【解决方案1】:

    具有 2 对的 TreeMap 的性能将表现为 N=2,无论之前进行了多少重复添加。多余的添加没有“记忆”,因此它们不可能产生任何开销。

    所以是的,您可以非正式地假设时间效率为“log 2”。

    尽管它相当没有意义,因为大 O 表示法旨在与渐近效率相关,而不是与小尺寸相关。对于 N=2,O(N^3) 算法很容易比 O(log N) 算法更快。

    【讨论】:

    • 因为大O不考虑尺度,所以O(log e(N)) O(log2(N))或O(log10(n))都是一样的。
    【解决方案2】:

    对于这种情况,树形图是 lg(n) 其中 n=2 如您所述。地图中只有 2 个值:一个数组列表和另一个数组列表。无论里面包含什么,地图只知道两个值。

    虽然不直接关心您的问题,但您可能需要考虑不为此使用树形图...我的意思是,您打算如何访问存储在“bob”或“jack”列表中的数据?这些将是 O(n) 搜索,除非您要对它们使用某种二进制搜索或其他东西,而这里的 n 是 100 万。如果您详细说明您的最终目标,也许可以实现更全面的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 2018-10-31
      相关资源
      最近更新 更多