笔记:使用对象数组提高效率的问题
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
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
相关文章推荐
- 在 WordPress 中加载 JavaScript 最好使用 wp_enqueue_script() 函数以减少问题提高效率
- 【收藏学习笔记】使用supervisor提高node.js调试效率
- 转贴:Linux 环境下多网卡使用一个IP提高效率--Bonding
- 提高书写效率--editplus使用经验总结
- 在Linux中如何提高文件系统的使用效率
- 使用xdoclet辅助Hibernate开发提高工作效率
- 使用xdoclet辅助Hibernate开发提高工作效率
- 使用命令行工具,提高开发效率~
- Improving Developer Productivity with Sculptor,使用Sculptor提高开发效率
- 使用tapestry-delegate提高Tapestry运行效率
- 4000 使用tapestry-delegate提高Tapestry运行效率
- 使用缓存技术提高效率
- 提高书写效率--editplus使用经验总结
- 使用VS2005搭建典型高效的SharePoint开发环境,提高生产效率,包含远程调试,自动部署
- 使用缓存技术提高效率
- 分享:花了一段时间整理和使用的提高ASP.NET效率的几个方面(希望大家拍砖)
- 使用prototype特性编程中的效率问题
- 使用缓存技术提高效率
- Socket网络编程学习笔记(6):使用线程池提高性能
- 花了一段时间整理和使用的提高ASP.NET效率的几个方面(希望大家拍砖)