Optimizarea codului în Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Acum știm despre complexitatea spațiu-timp!
Cum aplicăm această înțelegere pentru a scrie cod mai eficient?
Alegând structura de date potrivită!
Construim un sistem de gestionare a utilizatorilor
Trebuie să verificăm dacă un utilizator cu un nume dat există
Folosind o listă: complexitate $O(n)$
public boolean usernameExists(ArrayList<String> users, String newUsername) {
for (String username : users) {
if (username.equals(newUsername)) {
return true;
}
}
return false;
}
Soluție îmbunătățită pentru sistemul de gestionare a utilizatorilor:
public class UserRegistry {
private HashSet<String> users = new HashSet<>();
public boolean userExists(String username) {
return users.contains(username); // O(1) average time
}
}
HashMap: complexitate medie $O(1)$ pentru operațiipublic class UserCache {
private HashMap<String, UserProfile> userProfiles = new HashMap<>();
public UserProfile getUser(String username) {
return userProfiles.get(username); // O(1) average time
}
}
hashCode()ArrayList, nu știam indexul numelui de utilizator căutathashcode(), putem converti un obiect într-un index de căutarepavlos.2020 -> 35189
HashMap și HashSet au un array subiacenthashCode() pe elementul tău pentru a obține un întregExemplu:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
"optimizingCodeInJava" -> 1406313774 // Implemented by Java
1406313774 % 16 = 14 <- that's our bucket!
LinkedList pentru bucketAlegerea structurii de date e ca alegerea uneltei potrivite pentru o lucrare - un ciocan (ArrayList) e ideal pentru cuie, dar nepotrivit pentru șuruburi (unde un Set ar funcționa mai bine).

Optimizarea codului în Java