由于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),因为这是红黑树的工作方式,但只是想检查一下。
答案 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万。如果你详细说明你的最终目标,也许可以实现更具包容性的解决方案。