Codice 1:
private static int myCompare(String a, String b) {
/* my version of the compareTo method from the String Java class */
int len1 = a.length();
int len2 = b.length();
if (len1 == len2) {
for (int i = 0; i < a.length(); i++) {
int intValueOfStringA = (int) a.charAt(i);
int intValueOfStringB = (int) b.charAt(i);
if (intValueOfStringA != intValueOfStringB) {
return intValueOfStringA - intValueOfStringB;
}
}
}
return len1 - len2;
}
Codice 2:
private static int stringCompare(String a, String b) {
/* Direct implementation of the compareTo from the String Java class */
int len1 = a.length();
int len2 = b.length();
int lim = Math.min(len1, len2);
char[] v1 = a.toCharArray();
char[] v2 = b.toCharArray();
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
Si prega di ignorare i commenti sul tipo di modificatore di accesso utilizzato o sugli argomenti resi disponibili per il metodo. In realtà mi sono inventato il Codice 1 prima di essere consigliato dal mio amico di usare il metodo "compareTo" della String Class, che è riprodotto qui sotto il Codice 2. Mi chiedo quale pezzo di codice sia più efficace (w.r.t tempo e memoria). Si prega di avvisare.
Sto cercando di capire il Big O sia per i blocchi di codice che per migliorare elegantemente l'efficienza. Il codice IMO 2 è relativamente costoso con l'utilizzo della memoria. Voglio confermarlo Mi scuso se la mia domanda potrebbe alludere alla classica micro-ottimizzazione Vs. dibattito sul codice leggibile.