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();
- elsetails.increment();
- }
- }
- }
模拟抛硬币统计产生结果的例子,执行量级提高会提高两倍左右的速度。
LIGUORUIdeMacBook-Pro-2:bin xxx$ java Flips 5000000
115
60
LIGUORUIdeMacBook-Pro-2:bin xxx$ java Flips 50000000
1097
625
来源: http://www.92to.com/bangong/2016/12-01/13804193.html