首先理解什么是时间和空间,对于程序(java、c++、python等语言)代码而言:
在编程当中,存在某个程序,既需要运行速度快(用户体验好),又需要占用很少内存(成本少)。对于这两个需求没有完全绝对的说法,因为它们存在着对立面。就好比建筑工程上,让你干细活,还要让你在规定时间内完成。画家制作艺术品,让画家在一天时间内完成一副他这辈子最好的作品,一样道理;印证了生活里面的一句话:巧妇难为无米之炊;
只能在所控制范围内尽量完成;
这里用一段java中经常用到的数组排序为例:int[] a = {3,1,2,5,4};
一:时间转空间(利用足够长的时间节约内存的消耗量,即:可接受范围内的时间换取内存上面的占用量)
for (int i = 0; i < a.length-1; i++) {
for (int j = i+1; j < a.length; j++) {
if(a[i]>a[j]) {
a[i] = a[i]+a[j];
a[j] = a[i]-a[j];
a[i] = a[i]-a[j];
}
}
}
二:空间转时间(利用足够大的内存节省出最短的时间,即:不惜成本让程序在时间上的绝对要求)
for (int i = 0; i < a.length-1; i++) {
for (int j = i+1; j < a.length; j++) {
if(a[i]>a[j]) {
int b = a[i];
a[i]=a[j];
a[j] = b;
}
}
}
上述两个例子当中数组容量很小,对于这两段代码的运行,看不出什么明显差异,只是举例说明一下。但平常我们的开发当中就得注意:一般项目中,分页是时间转空间,缓存是空间转时间;
(一)中标红色部分,是利用运算让两个变量的值交换,运算是需要时间成本的,但是减少了变量(即:内存开辟空间);
(二)中标红色部分,是利用重新声明变量 int b,让两个变量的值交换,声明变量是需要消耗内存空间的,但减少了时间成本(即:程序运行时间);
以上只属于个人对于内存及时间在程序上面的一些看法,如有建议请下方留言,谢谢!