我猜他们是相同的,但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))))
答案 0 :(得分:10)
不要使用aset-*
个功能。只需使用aset
:(aset data q q)
即可。 不要问我为什么aset-*
函数存在。只要我记得他们的使用是沮丧的。