Code optimaliseren in Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
We kennen nu ruimte- en tijdcomplexiteit!
Hoe pas je dit toe om efficiëntere code te schrijven?
Door de juiste datastructuur te kiezen!
We bouwen een gebruikersbeheersysteem
We moeten voor een gegeven gebruikersnaam checken of een gebruiker bestaat
Met een lijst: complexiteit $O(n)$
public boolean usernameExists(ArrayList<String> users, String newUsername) {
for (String username : users) {
if (username.equals(newUsername)) {
return true;
}
}
return false;
}
Verbeterde oplossing voor gebruikersbeheer:
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)$ gemiddelde tijd voor bewerkingenpublic class UserCache {
private HashMap<String, UserProfile> userProfiles = new HashMap<>();
public UserProfile getUser(String username) {
return userProfiles.get(username); // O(1) average time
}
}
hashCode()ArrayList-voorbeeld kenden we de index van de te vinden gebruikersnaam niethashCode() kun je een object omzetten naar een index waar je op kunt zoekenpavlos.2020 -> 35189
HashMap en HashSet hebben een onderliggende arrayhashCode() aan op je element om een geheel getal te krijgenVoorbeeld:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
"optimizingCodeInJava" -> 1406313774 // Implemented by Java
1406313774 % 16 = 14 <- dat is onze bucket!
LinkedList voor de bucketEen datastructuur kiezen is als het juiste gereedschap kiezen: een hamer (ArrayList) is top voor spijkers maar waardeloos voor schroeven (waar een Set beter kan werken).

Code optimaliseren in Java