Optimiser le code en Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Vous connaissez maintenant les complexités en espace et en temps !
Comment appliquer cela pour écrire un code plus efficace ?
En choisissant la bonne structure de données !
Nous créons un système de gestion des utilisateurs
Pour un nom d'utilisateur donné, vérifier si un utilisateur existe
Avec une liste : complexité $O(n)$
public boolean usernameExists(ArrayList<String> users, String newUsername) {
for (String username : users) {
if (username.equals(newUsername)) {
return true;
}
}
return false;
}
Solution améliorée pour la gestion des utilisateurs :
public class UserRegistry {
private HashSet<String> users = new HashSet<>();
public boolean userExists(String username) {
return users.contains(username); // O(1) average time
}
}
HashMap : complexité moyenne $O(1)$ pour les opérationspublic class UserCache {
private HashMap<String, UserProfile> userProfiles = new HashMap<>();
public UserProfile getUser(String username) {
return userProfiles.get(username); // O(1) average time
}
}
hashCode()ArrayList, nous ne connaissions pas l'indice du nom d'utilisateur à trouverhashcode(), on convertit un objet en un indice à chercherpavlos.2020 -> 35189
HashMap et HashSet reposent sur un tableau internehashCode() sur l'élément pour obtenir un entierExemple :
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
"optimizingCodeInJava" -> 1406313774 // Implémenté par Java
1406313774 % 16 = 14 <- c'est notre panier !
LinkedList pour le panierChoisir une structure de données, c'est comme choisir le bon outil : un marteau (ArrayList) est parfait pour les clous, mais pas pour les vis (où un Set conviendrait mieux).

Optimiser le code en Java