Поиск значения (contains
) в HashSet
операция с постоянным временем (O (1)) в среднем, что лучше, чем List
, где contains
является линейным (O (n)). Итак, если ваши списки достаточно велики, возможно, стоит заменить первую строку на:
HashSet<Integer> list = new HashSet<Integer>();
Причина этого в том, что, чтобы найти значение в (несортированном) списке, вам нужно проверять каждый индекс в списке, пока вы не найдете тот, который хотите, или пока не закончатся индексы для проверки. В среднем вы проверите половину списка, прежде чем найдете значение, если значение есть в списке, или весь список, если его нет. Для хеш-таблицы вы создаете индекс из значения, которое хотите найти, затем проверяете, один индекс (возможно, вам нужно проверить более одного, но в хорошо спроектированная хеш-таблица).
Кроме того, если вы используете Set, вы получаете гарантию уникальности каждого значения, поэтому, если вы попытаетесь добавить уже существующее значение, add
вернет false
. Вы можете использовать это, чтобы немного упростить код (примечание: это не будет работать, если вы используете список, потому что add
всегда возвращает true
в списке):
HashSet<Integer> list = new HashSet<Integer>();
int value;
if(!list.add(value))
error("",null);
person
Brendan Long
schedule
10.12.2012
error("",null);
кажется довольно бесполезным... - person Brendan Long   schedule 10.12.2012