是java的效率';基于键数或值数的树映射?

是java的效率';基于键数或值数的树映射?,java,performance,tree,treemap,Java,Performance,Tree,Treemap,因为Java使用红黑树来实现TreeMap类,所以put()和get()的效率是lg(N),其中N=不同键的数量,还是N=您计划执行的插入/检索的数量 例如,假设我想使用 TreeMap<Integer, ArrayList<String>> TreeMap 要存储以下数据: 100万对和100万对(字符串被插入到对应于键的arraylist值中) 最后一个树状图将有2个键,每个键存储一百万个“bob”或“jack”字符串的arraylist。时间效率是1g(2mil

因为Java使用红黑树来实现TreeMap类,所以put()和get()的效率是lg(N),其中N=不同键的数量,还是N=您计划执行的插入/检索的数量

例如,假设我想使用

TreeMap<Integer, ArrayList<String>>
TreeMap
要存储以下数据:

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


最后一个树状图将有2个键,每个键存储一百万个“bob”或“jack”字符串的arraylist。时间效率是1g(2mil)还是1g(2)?我猜它是lg(2),因为红黑树就是这样工作的,但我只是想检查一下。

对于这种情况,树图是
lg(n)
,其中
n=2
。映射中只有两个值:一个arraylist和另一个arraylist。无论其中包含什么,地图只知道两个值


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

具有2对的树状图的性能将表现为N=2,而不管之前进行了多少重复添加。并没有多余添加的“内存”,所以它们不可能产生任何开销

是的,你可以非正式地假设时间效率是“log2”


虽然它是相当无意义的,因为大O表示法旨在与渐近效率相关,而不是与小尺寸相关。O(n ^ 3)算法很容易比O(log n)算法快N=2。

大O不考虑刻度,O(log e(n))o(Log2(n))或O(Log10(n))是相同的。