Code optimaliseren in Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
We kennen nu ruimte- en tijdcomplexiteit!
Hoe passen we dit toe om efficiënter te coderen?
Door de juiste datastructuur te kiezen!
We bouwen een gebruikersbeheersysteem
We moeten voor een 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) gemiddelde tijd
}
}
HashMap: $O(1)$ gemiddelde tijd voor operatiespublic class UserCache {
private HashMap<String, UserProfile> userProfiles = new HashMap<>();
public UserProfile getUser(String username) {
return userProfiles.get(username); // O(1) gemiddelde tijd
}
}
hashCode()ArrayList-voorbeeld kenden we de index van de te zoeken gebruikersnaam niethashCode() kunnen we een object omzetten naar een index om op te 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 // Geïmplementeerd door Java
1406313774 % 16 = 14 <- dat is onze bucket!
LinkedList per bucketDe juiste datastructuur kiezen is als het juiste gereedschap kiezen: een hamer (ArrayList) is top voor spijkers, maar slecht voor schroeven (waar een Set beter werkt).

Code optimaliseren in Java