您的位置:首页 > 其它

笔记:使用对象数组提高效率的问题

2016-11-21 03:48 176 查看
《算法第四版》p44

Java中对象数组即是一个由对象的引用组成的数组,而非所有对象本身组成的数组。

如果对象非常大,那么在移动它们时由于只需操作引用而非对象本身,就会大大提高效率;如果对象很小,每次获取信息时都需要通过引用反而会降低效率。

import edu.princeton.cs.algs4.Counter;
import edu.princeton.cs.algs4.StdRandom;

public class Flips {
public static void main(String[] args) {
long curr = System.currentTimeMillis();
tollCoin(args);
System.out.println(System.currentTimeMillis() - curr);
curr = System.currentTimeMillis();
rollCoin2(args);
System.out.println(System.currentTimeMillis() - curr);
}

private static void rollCoin2(String[] args) {
int t = Integer.parseInt(args[0]);
int sides = 10;
Counter[] rolls = new Counter[sides];
for (int i = 0; i < sides; i++) {
rolls[i] = new Counter(i + "'s");
}
for (int i = 0; i < t; i++) {
int result = StdRandom.uniform(0, sides);
rolls[result].increment();
}
}

private static void tollCoin(String[] args) {
int t = Integer.parseInt(args[0]);
Counter heads = new Counter("heads");
Counter tails = new Counter("tails");
for (int i = 0; i < t; i++) {
if (StdRandom.bernoulli(0.5))
heads.increment();
else
tails.increment();
}
}
}


模拟抛硬币统计产生结果的例子,执行量级提高会提高两倍左右的速度。

LIGUORUIdeMacBook-Pro-2:bin xxx$ java Flips 5000000

115

60

LIGUORUIdeMacBook-Pro-2:bin xxx$ java Flips 50000000

1097

625
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: