Optimera kod i Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Nu vet vi vad tids- och rymdkomplexitet är!
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 ett givet användarnamn finns
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)$ 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 kände vi inte till indexet för användarnamnet vi söktehashcode() kan vi omvandla ett objekt till ett index att slå upppavlos.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 utmärkt för spik men sämre för skruvar (där ett Set kan passa bättre).

Optimera kod i Java