欢迎!请参阅关于页面获取有关如何操作的更多信息。
在寻找应用程序中的执行速度时,构造映射和向量时都会倾向于使用java.util.ArrayList。然而,这样会有一些陷阱。例如,对于向量,并不明显使用LazilyPersistentVector/createOwning(前者工作正常)会比使用如PersistentVector/adopt(只有当向量大小小于32时才有效)更合适。
java.util.ArrayList
LazilyPersistentVector/createOwning
PersistentVector/adopt
同理,对于映射,如果有少于9个条目,可以选择创建一个PersistentArrayMap;如果条目有9个或更多,则应使用PersistentHashMap。
PersistentArrayMap
PersistentHashMap
我不打算指定解决方案,但有一些在clojure.core中的函数,它们接受数组作为参数并返回适当的数据结构 (array->vector arr) ;; 与LazyPersistentVector/createOwning的功能相同 (array->map arr) ;; 根据大小返回PAM或PHM
clojure.core
(array->vector arr) ;; 与LazyPersistentVector/createOwning的功能相同 (array->map arr) ;; 根据大小返回PAM或PHM
在这里尝试找到根本问题 - 是关于构建性能,还是具体关于数组 -> 持久向量?对于映射,我假设它是一个kv数组的映射 -> 持久映射?
已经有一个数组 -> 向量的接口 (into [] arr),所以可能真正的问题是让它更快(这实际上与我目前正在进行的其他工作有所交集)。可能最好的映射等价是(apply hash-map arr),但是它会像你说的那样选择实现。
(into [] arr)
(apply hash-map arr)