Предоставляет ли HashSet какую-либо дополнительную ценность для производительности в этом экземпляре? - PullRequest
0 голосов
/ 16 ноября 2018

Итак, я работаю с существующим методом в Java, который возвращает List (ArrayList). Тем не менее, я хочу добавить к нему некоторые функциональные возможности, чтобы, если он был указан, он исключал определенный объект. Теперь я понимаю, что в общем случае с помощью метода contains () в HashSet достигается лучшая производительность по сравнению с ArrayList, но мне интересно, можно ли добиться оправданного повышения производительности в двух вариантах кода, приведенных ниже:

Примечания: listOfAccounts - это ArrayList, возвращаемый из вызова DAO. personalAccount - это объект типа Account.

if (excludePersonalAccount) {
   Set<Account> accounts = new HashSet<Account>(listOfAccounts);
   if (accounts.contains(personalAccount) {
      listOfAccounts.remove(personalAccount);
   }
}

VS

if (excludePersonalAccount) {
   listOfAccounts.remove(personalAccount)
}

1 Ответ

0 голосов
/ 16 ноября 2018
Set<Account> accounts = new HashSet<Account>(listOfAccounts);

Приведенная выше строка берет все элементы ArrayList и добавляет его к HashSet. Вместо того, чтобы делать все это, вы можете перебрать List и посмотреть, содержится ли ваш элемент внутри него. Если это так, то вы можете удалить его (что по сути и делает ваш второй фрагмент).

По этой причине второй фрагмент предпочтительнее, так как они оба работают за линейное время.

...