Ottimizzazione del codice in Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Capire la complessità in spazio è cruciale per creare applicazioni che:
OutOfMemoryErrorLa notazione è identica a quella della complessità in tempo.
Classi comuni:
O(1): Costante — indipendente dalla dimensioneO(n): Lineare — cresce con l'inputO(n²): Quadratica — cresce quadraticamente con l'inputpublic int findMax(int[] array) {
int max = Integer.MIN_VALUE;
for (int value : array) {
if (value > max) {
max = value;
}
}
return max;
}
Che l'array abbia 10 o 10 milioni di elementi, usiamo memoria solo per una variabile: max
La complessità in spazio è O(1), ovvero costante
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 elementi, serve spazio per n elementi aggiuntiviO(n) perché la memoria extra cresce linearmente con l'inputpublic 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, servono 100 celle; se n è 100, servono 10.000 celleO(n²)La memoria è limitata!
I nostri esempi con input di 10.000 elementi:
findMax, O(1) -> solo pochi byte extradoubleValues, O(n) -> ~40 KB di memoria in piùmultiplicationTable, O(n²) -> circa 400 MB in più
Non dimenticare:

Ottimizzazione del codice in Java