欢迎!请查阅关于页面以了解更多关于这个问题的信息。
在寻找应用程序中的执行速度时,很容易在构造映射和向量时都使用 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) ;; 这一操作与 LazilyPersistentVector/createOwning 相当 (array->map arr) ;; 根据大小返回 PAM 或 PHM
clojure.core
(array->vector arr) ;; 这一操作与 LazilyPersistentVector/createOwning 相当 (array->map arr) ;; 根据大小返回 PAM 或 PHM
尝试找到根本问题——这是关于构建性能还是具体关于数组转换为持久向量?对于映射,我假设是数组的 kv 转换为持久映射?
已经存在一个数组和向量的接口(into [] arr),所以这可能真的是关于使它更快的。这实际上与我现在正在做的工作有关。对于映射,最好的等效操作可能是 (apply hash-map arr),但这样会选择一个实现。
(into [] arr)
(apply hash-map arr)