Optimera kod i Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Nu känner vi till både utrymmes- och tidskomplexitet!
Hur använder vi den kunskapen för att skriva effektivare kod?
Genom att välja rätt datastruktur!
Vi bygger ett användarhanteringssystem
Vi behöver kontrollera om en användare finns, givet ett användarnamn
Med en lista: komplexitet $O(n)$
public boolean usernameExists(ArrayList<String> users, String newUsername) {
for (String username : users) {
if (username.equals(newUsername)) {
return true;
}
}
return false;
}
Förbättrad lösning för användarhanteringssystemet:
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)$ i genomsnittlig tidskomplexitet för operationerpublic class UserCache {
private HashMap<String, UserProfile> userProfiles = new HashMap<>();
public UserProfile getUser(String username) {
return userProfiles.get(username); // O(1) average time
}
}
hashCode()ArrayList-exempel visste vi inte indexet för användarnamnet vi letade efterhashcode() kan vi omvandla ett objekt till ett index att söka efterpavlos.2020 -> 35189
HashMap och HashSet har en underliggande arrayhashCode() på elementet för att få ett heltalExempel:
[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 används för bucketenAtt välja datastruktur är som att välja rätt verktyg för jobbet - en hammare (ArrayList) är perfekt för spikar men usel för skruvar (där en Set kan fungera bättre).

Optimera kod i Java