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

时间:2011-06-01 05:03:55

标签: java arrays clojure

我猜他们是相同的,但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))))

1 个答案:

答案 0 :(得分:10)

不要使用aset-*个功能。只需使用aset(aset data q q)即可。 不要问我为什么aset-*函数存在。只要我记得他们的使用是沮丧的。