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

《算法第四版》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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值