Clojure数组应该和Java数组一样快吗

问题描述

|| 我猜他们是同一回事,但是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功能。只要我记得不鼓励使用它们。