Оптимізація коду в Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Тепер ми знаємо про складність за пам'яттю та часом!
Як застосувати це, щоб писати ефективніший код?
Обирайте правильну структуру даних!
Ми будуємо систему керування користувачами
Треба перевіряти для заданого імені користувача, чи існує користувач
Використовуючи список: складність $O(n)$
public boolean usernameExists(ArrayList<String> users, String newUsername) {
for (String username : users) {
if (username.equals(newUsername)) {
return true;
}
}
return false;
}
Поліпшене рішення для керування користувачами:
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)$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 ми не знали індекс імені користувачаhashCode() дає змогу перетворити об'єкт на індекс для пошукуpavlos.2020 -> 35189
HashMap і HashSet мають підкладений масивhashCode() для елемента, щоб отримати ціле числоПриклад:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
"optimizingCodeInJava" -> 1406313774 // Реалізовано в Java
1406313774 % 16 = 14 <- це наш бакет!
LinkedListВибір структури даних — як вибір інструмента: молоток (ArrayList) добрий для цвяхів, але поганий для гвинтів (де краще підійде Set).

Оптимізація коду в Java