Optimasi Kode di Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Kita kini paham kompleksitas ruang dan waktu!
Bagaimana menerapkannya untuk menulis kode yang lebih efisien?
Dengan memilih struktur data yang tepat!
Kita membangun sistem manajemen pengguna
Kita perlu mengecek, untuk sebuah username, apakah pengguna ada
Menggunakan list: kompleksitas $O(n)$
public boolean usernameExists(ArrayList<String> users, String newUsername) {
for (String username : users) {
if (username.equals(newUsername)) {
return true;
}
}
return false;
}
Solusi sistem manajemen pengguna yang lebih baik:
public class UserRegistry {
private HashSet<String> users = new HashSet<>();
public boolean userExists(String username) {
return users.contains(username); // O(1) waktu rata-rata
}
}
HashMap: kompleksitas waktu rata-rata $O(1)$ untuk operasipublic class UserCache {
private HashMap<String, UserProfile> userProfiles = new HashMap<>();
public UserProfile getUser(String username) {
return userProfiles.get(username); // O(1) waktu rata-rata
}
}
hashCode()ArrayList, kita tidak tahu indeks username yang dicarihashcode(), kita bisa mengubah objek menjadi indeks yang bisa dicaripavlos.2020 -> 35189
HashMap dan HashSet memakai array dasarhashCode() pada elemen untuk mendapat integerContoh:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
"optimizingCodeInJava" -> 1406313774 // Diimplementasikan oleh Java
1406313774 % 16 = 14 <- itu bucket kita!
LinkedList dipakai untuk bucketMemilih struktur data seperti memilih alat yang tepat untuk pekerjaan—palu (ArrayList) cocok untuk paku, tapi buruk untuk sekrup (di mana Set lebih baik).

Optimasi Kode di Java