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

Hah*_*ess 10 java arrays clojure

我猜它们是相同的,但Clojure使用Array类来操作.

无论如何,我被告知在Clojure中如果你真的需要速度那么你可以使用数组但是在以下程序之间Java版本要快得多

(time
 (let [data (int-array 100000000)]
   (dotimes [q 100000000]
     (aset-int data q q))))
Run Code Online (Sandbox Code Playgroud)

_

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

相比之下,使用IntBuffer类的Clojure程序几乎与Java代码一样快

(time
 (let [data (IntBuffer/allocate 100000000)]
   (dotimes [q 100000000]
     (.put data q q))))
Run Code Online (Sandbox Code Playgroud)

kot*_*rak 10

不要使用aset-*功能.只需使用aset:(aset data q q).不要问我为什么aset-*功能在那里.只要我记得他们的使用是灰心丧气的.