Ottimizzazione del codice in Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Notazione matematica per descrivere il caso peggiore.
Alcune classi di complessità comuni:
O(1): Tempo costante - indipendente dalla dimensioneget() di ArrayListImplementazione interna (semplificata) di un ArrayList di String:
public class ArrayList {}
private String[] data; // Array interno
private int size;
// Operazione get - accesso diretto all'array
public String get(int index) {
return data[index]; // O(1)
}
}
Notazione matematica per descrivere il caso peggiore
Classi di complessità comuni:
O(1): Tempo costante - indipendente dalla dimensioneO(n): Tempo lineare - cresce con l'inputcontains() di ArrayListpublic boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
// Ricerca lineare nell'array
for (int i = 0; i < size; i++) {
if (o.equals(elementData[i])) {
return i;
}
}
return -1; // Non trovato
}
Notazione matematica per descrivere il caso peggiore
Classi di complessità comuni:
O(1): Tempo costante - indipendente dalla dimensioneO(n): Tempo lineare - cresce con l'inputO(n²): Tempo quadratico - cresce quadraticamente con l'input// Trovare una coppia di numeri che somma a un valore target
// Complessità temporale: O(n²)
public int[] findPairWithSum(ArrayList<Integer> numbers, int targetSum) {
for (int i = 0; i < numbers.size(); i++) {
for (int j = i + 1; j < numbers.size(); j++) {
if (numbers.get(i) + numbers.get(j) == targetSum) {
console.log("Found them!")
}
}
}
}
Impatto della dimensione dell'input:
O(1): da 1.000 a 1.000.000 elementi = Stesso tempo!O(n): da 1.000 a 1.000.000 elementi = 1.000× più lentoO(n²): da 1.000 a 1.000.000 elementi = 1.000.000× più lento
Ottimizzazione del codice in Java