




The
HashSet<T>class provides high-performance set operations. A set is a collection that contains no duplicate elements, and whose elements are in no particular order...The capacity of a
HashSet<T>object is the number of elements that the object can hold. AHashSet<T>object's capacity automatically increases as elements are added to the object.The
HashSet<T>class is based on the model of mathematical sets and provides high-performance set operations similar to accessing the keys of theDictionary<TKey, TValue>orHashtablecollections. In simple terms, theHashSet<T>class can be thought of as aDictionary<TKey, TValue>collection without values.A
HashSet<T>collection is not sorted and cannot contain duplicate elements...
Я посмотрел на arraylist, и он, безусловно, лучше, чем arraylist, поэтому я удалил свой предыдущий ответ.
HashSet собирается ToString типа ... а не списка. И список, который он отображает, соответствует порядку, который HashSet не поддерживает.
Правильный. Чтобы получить список строк, вы должны использовать такой код: int [] a = h.ToArray <int> (); Array.Sort <int> (а); строка.Join (',', a); Это невысокая производительность, но у меня сложилось впечатление, что это не обычная операция и больше для отладки / просмотра, чем для вычислений.
Обновлено для Linq: String.Join(", ", a.OrderBy(_ => _)).
@EBGreen буквально любой другой тип коллекции лучше, чем ArrayList для подавляющего большинства случаев использования.
Если вы не можете использовать .NET 3.5, вы не можете использовать HashSet. В этом случае легко создать свой собственный на основе структуры словаря.
public class Set<T> {
private class Unit { ... no behavior }
private Dictionary<T, Unit> d;
....
}
Unit - это тип с одним значением. Неважно, какие элементы вы сопоставляете к, просто используйте ключи, чтобы знать, что в вашем наборе. Операции, которые вы просили в вопросе, просты в реализации.
Зачем вообще создавать классы Unit? Значение может быть null.
Какой будет тип? "объект"?
вы можете унаследовать класс от KeyedCollection. Таким образом, ваш ключ может быть самим значением, вы можете переопределить ToString, чтобы получить желаемый результат. Это может дать вам желаемое / необходимое поведение.
Обратите внимание, что этот ответ был для фреймворка 2.0, части Q
В ходе тестирования я обнаружил, что Dictionary с фиктивным значением работает быстрее, чем HashSet, при работе с очень большими наборами данных (более 100 000 в моем случае). Я ожидаю, что это связано с тем, что Словарь позволяет вам установить начальную емкость, но я точно не знаю. В случае, который вы описываете, я, вероятно, использовал бы Словарь, если бы ожидал очень большой набор чисел, а затем (или как я добавлял в Словарь, в зависимости от намерения) перебирал его с помощью построителя строк, для создания выходной строки.
Извините, я не уточнил. Я могу использовать последнюю версию фреймворка. 3.5, но ваши ответы могут помочь другим, не имеющим возможности использовать последнюю версию.