Codeoptimierung in Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Jetzt kennen wir Raum- und Zeitkomplexität!
Wie setzen wir das ein, um effizienteren Code zu schreiben?
Indem wir die richtige Datenstruktur wählen!
Wir bauen ein Benutzerverwaltungssystem
Für einen gegebenen Benutzernamen müssen wir prüfen, ob ein Benutzer existiert
Mit einer Liste: Komplexität $O(n)$
public boolean usernameExists(ArrayList<String> users, String newUsername) {
for (String username : users) {
if (username.equals(newUsername)) {
return true;
}
}
return false;
}
Verbesserte Lösung für die Benutzerverwaltung:
public class UserRegistry {
private HashSet<String> users = new HashSet<>();
public boolean userExists(String username) {
return users.contains(username); // O(1) average time
}
}
HashMap: $O(1)$ durchschnittliche Zeitkomplexität für Operationenpublic class UserCache {
private HashMap<String, UserProfile> userProfiles = new HashMap<>();
public UserProfile getUser(String username) {
return userProfiles.get(username); // O(1) average time
}
}
hashCode()ArrayList-Beispiel kannten wir den Index des gesuchten Benutzernamens nichthashcode() können wir ein Objekt in einen suchbaren Index umwandelnpavlos.2020 -> 35189
HashMap und HashSet basieren auf einem ArrayhashCode() auf deinem Element auf und erhält eine ganze ZahlBeispiel:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
"optimizingCodeInJava" -> 1406313774 // Implemented by Java
1406313774 % 16 = 14 <- das ist unser Bucket!
LinkedList für den BucketDie Wahl der Datenstruktur ist wie das richtige Werkzeug für eine Aufgabe – ein Hammer (ArrayList) ist super für Nägel, aber schlecht für Schrauben (da passt ein Set besser).

Codeoptimierung in Java