基于键或值的数量,java的TreeMap的效率是多少?

时间:2012-07-24 04:40:44

标签: java performance tree treemap

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

例如,假设我想使用

TreeMap<Integer, ArrayList<String>>

存储以下数据:

100万&lt; 1,“bob”&gt;对和1百万&lt; 2,“jack”&gt;对(字符串插入对应于键的arraylist值)

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

2 个答案:

答案 0 :(得分:2)

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

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

虽然它是毫无意义的,因为大O符号旨在与渐近效率相关而不是与小尺寸相关。对于N = 2,O(N ^ 3)算法可以比O(log N)算法更快。

答案 1 :(得分:0)

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

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