Code optimaliseren in Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Ruimtecomplexiteit begrijpen is cruciaal om apps te bouwen die:
OutOfMemoryError vermijdenNotatie is identiek aan tijdcomplexiteit.
Enkele veelvoorkomende klassen:
O(1): Constante tijd — onafhankelijk van grootteO(n): Lineaire tijd — groeit met inputgrootteO(n²): Kwadratische tijd — groeit kwadratisch met inputgroottepublic int findMax(int[] array) {
int max = Integer.MIN_VALUE;
for (int value : array) {
if (value > max) {
max = value;
}
}
return max;
}
Of onze integerarray 10 of 10 miljoen elementen heeft, we gebruiken maar geheugen voor één variabele: max
De ruimtecomplexiteit is O(1), oftewel constante ruimte
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 elementen, dan is er ruimte nodig voor n extra elementenO(n) omdat het extra geheugen lineair met de inputgrootte groeitpublic 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, dan zijn 100 cellen nodig; is n 100, dan 10.000 cellenO(n²)Geheugen is eindig!
Onze eerdere voorbeelden bij een inputgrootte van 10.000 elementen:
findMax, O(1) -> slechts enkele extra bytesdoubleValues, O(n) -> ca. 40 KB extra geheugenmultiplicationTable, O(n²) -> ca. 400 MB extra geheugen
Vergeet niet:

Code optimaliseren in Java