Найти один объект в коллекции, фильтр HashMap vs List
создать список Customer
из файла, который я читаю. Я храню этих клиентов HashMap
где ключ является уникальным идентификатором:
Map<String, Customer> customers = readCustomers();
//For each object created
customers.put(c.getCustomerId(), c);
из второго файла я получаю данные, которые я использую для обновления объекта в HashMap
. Я использую ключ, чтобы найти объект для обновления:
//get the details informations
customers.get(customerId).setDetails(details);
в java 8 я мог бы использовать:
class Customer{
...
public static Customer find(List<Customer> customers, int id) {
return customers.stream().filter(c -> c.customerId == id).findAny().get();
}
}
//usage
List<Customer> customers = readCustomers();
...
Customer.find(customers, 21).setDetails(details);
будет ли повышение производительности с помощью метода Java 8 ? Что самое лучшее практика между этими методами?
1 ответов
поиск значения по ключу в HashMap занимает O(1) ожидаемое время, что быстрее, чем O (n), что поиск того же значения в списке займет.
использование потоков Java 8 не меняет этого, так как за кулисами нового синтаксиса он все еще повторяет элементы списка до тех пор, пока не найдет совпадение.