如何使用预先排序的数据初始化TreeMap?
我的应用程序使用TreeMap来保持数据排序并具有log(n)查找和插入。 这在应用程序运行时的一般情况下效果很好,但是当应用程序首次启动时,我需要初始化TreeMap,其中有几百万个长整数,我按排序顺序 (升序)。
由于这些初始化值已经排序,有没有办法将它们插入TreeMap而不支付树插入和重新平衡的log(n)成本?
当然! TreeMap.putAll
方法(以及采用SortedMap的TreeMap构造函数)在内部调用一个名为buildFromSorted
的方法,在文档中将其描述为:“排序数据中的线性时间树构建算法”,这样听起来就像它做你想要的。
只需给putAll
方法一些实现Map的东西,但是map的entryset iterator( Map.entrySet().iterator()
)返回你的排序值列表。