问题描述
||
我猜他们是同一回事,但是Clojure使用Array类进行操作。
无论如何,有人告诉我,在Clojure中,如果您确实需要速度,则可以使用数组,但是在以下程序之间,Java版本要快得多
(time
(let [data (int-array 100000000)]
(dotimes [q 100000000]
(aset-int data q q))))
_
public class Array{
public static void main(String[] args){
long start = System.currentTimeMillis();
int[] data = new int[100000000];
for(int q = 0;q < data.length;q++){
data[q] = q;
}
System.out.println(System.currentTimeMillis() - start);
}
}
相反,此使用IntBuffer类的Clojure程序几乎与Java代码一样快
(time
(let [data (IntBuffer/allocate 100000000)]
(dotimes [q 100000000]
(.put data q q))))
解决方法
不要使用
aset-*
函数。只需使用aset
:(aset data q q)
。不要问我为什么有3功能。只要我记得不鼓励使用它们。