public static void spaceToTime(int[] array) {
int i = ;
int max = array[];
int l = arraylength;
for (i = ; i < l; i++)
if (array[i] > max) //找出最大值
max = array[i];
int[] temp = new int[max + ]; //分配临时空间
for (i = ; i < l; i++)
temp[array[i]] = array[i]; //以索引下标来标识数字大小
int j = ;
int maxmax = max + ;
for (i = ; i < max; i++) { //线性复杂度
if (temp[i] > ) {
array[j++] = temp[i];
}
}
}
}
上例中函数spaceToTime()实现了数组的排序它不计空间成本以数组的索引下标来表示数据大小因此避免了数字间的相互比较这是一种典型的空间换时间的思路
在本例中对万数据进行排序(使用JVM参数XmxM XmsM运行程序)在笔者的计算机上输出显示
Arrayssort spend: ms
spaceToTime spend: ms
可以看到在本例中spaceToTime()的速度优于JDK自带的数组排序方法但是这里需要指出的是这并不表示对任何规模段的数组排序spaceToTime()都优于Arrayssort()如果数组中元素不多或者当前CPU的运算能力很强那么Arrayssort()方法的执行速度并不会比spaceToTime()慢而相对地如果CPU运算能力较弱那么这种以空间换取计算资源的方法会取得相对较好的效果
返回目录Java程序性能优化让你的Java程序更快更稳定
编辑推荐
Java程序设计培训视频教程
JEE高级框架实战培训视频教程
JME移动开发实战教学视频
Visual C++音频/视频技术开发与实战
Oracle索引技术
ORACLEG数据库开发优化指南
[] []