Java'da Kod Optimizasyonu
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Artık yer ve zaman karmaşıklığını biliyoruz!
Peki bu bilgiyi daha verimli kod yazmak için nasıl uygularız?
Doğru veri yapısını seçerek!
Bir kullanıcı yönetim sistemi kuruyoruz
Verilen bir kullanıcı adı için kullanıcının var olup olmadığını kontrol etmeliyiz
Liste kullanırsak: karmaşıklık $O(n)$
public boolean usernameExists(ArrayList<String> users, String newUsername) {
for (String username : users) {
if (username.equals(newUsername)) {
return true;
}
}
return false;
}
Geliştirilmiş kullanıcı yönetimi çözümü:
public class UserRegistry {
private HashSet<String> users = new HashSet<>();
public boolean userExists(String username) {
return users.contains(username); // O(1) average time
}
}
HashMap: işlemler için ortalama $O(1)$ zaman karmaşıklığıpublic class UserCache {
private HashMap<String, UserProfile> userProfiles = new HashMap<>();
public UserProfile getUser(String username) {
return userProfiles.get(username); // O(1) average time
}
}
hashCode()ArrayList örneğimizde, bulmak için kullanıcı adının indeksini bilmiyordukhashcode() yöntemiyle bir nesneyi arayabileceğimiz bir indekse dönüştürebilirizpavlos.2020 -> 35189
HashMap ve HashSet altında bir dizi barındırırhashCode() çağırırÖrnek:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
"optimizingCodeInJava" -> 1406313774 // Java tarafından uygulanır
1406313774 % 16 = 14 <- kovamız bu!
LinkedList kullanılırVeri yapısı seçimi, işe uygun doğru aracı seçmek gibidir - bir çekiç (ArrayList) çiviler için harika ama vidalar için kötüdür (orada bir Set daha iyi olabilir).

Java'da Kod Optimizasyonu