我在java中对一个长数组执行了一个简短的基准测试,结果非常奇怪.看起来随机写入的顺序读取比使用顺序写入的随机读取更快 - 一半时间.有谁知道为什么?
以下是两种方法,当按顺序读取时,随机写入一些长整数的数组(使用-Xmx2G左右运行),并在随机写入时按顺序读取:
import java.util.Random;
public class Scratch {
static Random random = new Random();
static long[] arr = new long[100000000];
static void seqReadRandWrite() {
for(int i=0;i<arr.length;i++) {
int at = random.nextInt(arr.length);
arr[at] = arr[i];
}
}
static void seqWriteRandRead() {
for(int i=0;i<arr.length;i++) {
int at = random.nextInt(arr.length);
arr[i] = arr[at];
}
}
public static void main(String[] args) throws Exception {
seqWriteRandRead(); // warm up
long nanos = System.nanoTime();
seqReadRandWrite();
System.out.println("Time: " + (System.nanoTime()-nanos) + "ns");
nanos = System.nanoTime(); …Run Code Online (Sandbox Code Playgroud) 是否有一种优雅的方式来更新Map中已存在的值?
这看起来太吓人了:
val a = map.get ( something )
if ( a != null ) // case .. excuse my old language
a.apply( updateFunction )
else
map.put ( something, default )
Run Code Online (Sandbox Code Playgroud)