Найти один объект в коллекции, фильтр 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 не меняет этого, так как за кулисами нового синтаксиса он все еще повторяет элементы списка до тех пор, пока не найдет совпадение.