Java 代码优化
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
理解空间复杂度有助于构建以下应用:
OutOfMemoryError 的崩溃记号与时间复杂度相同。
常见复杂度类别:
O(1): 常数——与规模无关O(n): 线性——随输入线性增长O(n²): 二次——随输入平方增长public int findMax(int[] array) {
int max = Integer.MIN_VALUE;
for (int value : array) {
if (value > max) {
max = value;
}
}
return max;
}
无论整数数组有 10 个还是 1000 万个元素,只需为一个变量 max 占用内存
空间复杂度为 O(1),即常数空间
public int[] doubleValues(int[] array) {
int[] result = new int[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = array[i] * 2;
}
return result;
}
n 个元素,则需为 n 个额外元素分配空间O(n),额外内存随输入线性增长public int[][] multiplicationTable(int n) {
int[][] table = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
table[i][j] = (i + 1) * (j + 1);
}
}
return table;
}
n 为 10,需要 100 个单元;n 为 100,需要 10,000 个单元O(n²)内存是有限资源!
前面示例在输入规模为 10,000 时:
findMax,O(1) -> 仅少量额外字节doubleValues,O(n) -> 约 40KB 额外内存multiplicationTable,O(n²) -> 约 400MB 额外内存
请记住:

Java 代码优化