При обработке больших объемов данных, я часто делаю следующее:HashSet против ArrayList содержит производительность
HashSet<String> set = new HashSet<String>();
//Adding elements to the set
ArrayList<String> list = new ArrayList<String> (set);
Что-то вроде «демпинг» содержимое набора в списке. Обычно я делаю это, так как элементы, которые я добавляю, часто содержат дубликаты, которые я хочу удалить, и это кажется простым способом их удалить.
Только с этой целью в виде (избегая дубликаты) Я мог бы также написать:
ArrayList<String> list = new ArrayList<String>();
// Processing here
if (! list.contains(element)) list.add(element);
//More processing here
И, таким образом, нет необходимости «сбрасывать» набор в список. Тем не менее, я бы сделал небольшую проверку перед вставкой каждого элемента (который я также предполагаю, что HashSet делает это)
Является ли любая из двух возможностей более эффективной?
У вас возникла ваша первая часть вопроса. Вы сбрасываете список в наборе, чтобы избавиться от дубликатов, а не наоборот, не так ли? – MirMasej
Почему бы вам не проверить его? Кстати, зачем вообще конвертировать набор в список? Переход через набор, скорее всего, будет быстрее для больших массивов. – luk32
Привет, спасибо за ваши комментарии. В этом сценарии я заполняю свой набор данными (чтобы избежать дубликатов), а затем дамп его в список, таким образом я эффективно получаю список без обманов. Если мне не нужен список, я бы не создал его, но иногда сортировка применяется после этого, а для некоторых из кода, с которым я работаю, требуются списки. – Jorge