Класс HashSet< E>
Неупорядоченная реализация Set на основе хеш-таблицы.
Элементы HashSet должны иметь согласованные реализации equality и hashCode. Это означает, что операция equals должна задавать стабильное отношение эквивалентности между элементами (рефлексивное, симметричное, транзитивное и неизменное во времени), а hashCode должен быть согласован с equality, то есть иметь одинаковое значение для объектов, которые считаются равными.
Большинство простых операций над HashSet выполняются за постоянное время (возможно, амортизированное): add, contains, remove и length, если хеш-коды объектов распределены равномерно.
Порядок итерации множества не определён и зависит от хеш-кодов переданных элементов. Однако порядок стабилен: несколько итераций по одному и тому же множеству дают одинаковый порядок, если множество не изменяется.
Примечание: Не изменяйте множество (не добавляйте и не удаляйте элементы), пока над ним выполняется операция, например в функциях, вызываемых во время вызова forEach или containsAll, либо во время итерации по множеству.
Не изменяйте элементы так, чтобы менялось их равенство (и, следовательно, хеш-код), пока они находятся в множестве. Некоторые специализированные виды множеств могут допускать большую свободу в отношении равенства; в таком случае они должны описывать своё отличающееся поведение и ограничения.
Пример:
final letters = HashSet<String>();
Чтобы добавить данные в множество, используйте add или addAll.
letters.add('A');
letters.addAll({'B', 'C', 'D'}); Чтобы проверить, пусто ли множество, используйте isEmpty или isNotEmpty. Чтобы узнать количество элементов в множестве, используйте length.
print(letters.isEmpty); // false
print(letters.length); // 4
print(letters); // fx {A, D, C, B} Чтобы проверить, содержит ли множество элемент с определённым значением, используйте contains.
final bExists = letters.contains('B'); // true Метод forEach вызывает функцию для каждого элемента множества.
letters.forEach(print); // A // D // C // B
Чтобы создать копию множества, используйте toSet.
final anotherSet = letters.toSet();
print(anotherSet); // fx {A, C, D, B} Чтобы удалить элемент, используйте remove.
final removedValue = letters.remove('A'); // true
print(letters); // fx {B, C, D} Чтобы удалить несколько элементов одновременно, используйте removeWhere или removeAll.
letters.removeWhere((element) => element.startsWith('B'));
print(letters); // fx {D, C} Чтобы удалить из этого множества все элементы, не удовлетворяющие условию, используйте retainWhere.
letters.retainWhere((element) => element.contains('C'));
print(letters); // {C} Чтобы удалить все элементы и очистить множество, используйте clear.
letters.clear();
print(letters.isEmpty); // true
print(letters); // {} См. также:
- Set — общий интерфейс коллекции, в которой каждый объект может встречаться только один раз.
- Объекты LinkedHashSet хранятся в порядке добавления.
- SplayTreeSet перебирает объекты в отсортированном порядке.
- Реализованные типы
-
-
Set<
E>
-
Set<
- Доступные расширения
Конструкторы
- HashSet({bool equals(E, E)?, int hashCode(E)?, bool isValidKey(dynamic)?}) factory
- Создаёт хеш-множество, используя переданные
equalsдля сравнения на равенство. - HashSet.from(Iterable elements) factory
- Создаёт хеш-множество, содержащее все
elements. - HashSet.identity() factory
- Создаёт неупорядоченное множество, основанное на идентичности объектов.
- HashSet.of(Iterable<
E> elements) factory - Создаёт хеш-множество, содержащее все
elements.
Свойства
- first → E read-onlyinherited
- Возвращает первый элемент.
- hashCode → int read-onlyinherited
- Хеш-код этого объекта.
- isEmpty → bool read-onlyinherited
- Содержит ли эта коллекция элементы.
- isNotEmpty → bool read-onlyinherited
- Содержит ли эта коллекция хотя бы один элемент.
- iterator → Iterator<
E> read-onlyoverride - Предоставляет итератор для перебора элементов этого множества.
- last → E read-onlyinherited
- Возвращает последний элемент.
- length → int read-onlyinherited
- Возвращает количество элементов в итерируемой последовательности.
- runtimeType → Type read-onlyinherited
- Представление типа объекта во время выполнения.
- single → E read-onlyinherited
- Проверяет, что эта итерируемая последовательность содержит только один элемент, и возвращает этот элемент.
Методы
- add(
E value) → bool inherited - Добавляет
valueв множество. - addAll(
Iterable< E> elements) → void inherited - Добавляет все
elementsв это множество. - any(
bool test(E element)) → bool inherited - Проверяет, удовлетворяет ли хотя бы один элемент этой итерируемой последовательности
test. - cast<
R>( ) → Set< R> inherited - Предоставляет представление этого множества как множества экземпляров
R. - clear(
) → void inherited - Удаляет все элементы из множества.
- contains(
Object? value) → bool inherited - Содержится ли
valueв множестве. - containsAll(
Iterable< Object?> other) → bool inherited - Содержит ли это множество все элементы
other. - difference(
Set< Object?> other) → Set< E> inherited - Создаёт новое множество из элементов этого множества, отсутствующих в
other. - elementAt(
int index) → E inherited - Возвращает элемент с индексом
index. - every(
bool test(E element)) → bool inherited - Проверяет, удовлетворяет ли каждый элемент этой итерируемой последовательности
test. - expand<
T>( Iterable< T> toElements(E element)) → Iterable< T> inherited - Преобразует каждый элемент этой Iterable в ноль или более элементов.
- firstWhere(
bool test(E element), {E orElse()?}) → E inherited - Возвращает первый элемент, удовлетворяющий заданному предикату
test. - fold<
T>( T initialValue, T combine(T previousValue, E element)) → T inherited - Сводит коллекцию к одному значению, последовательно объединяя каждый её элемент с имеющимся значением.
- followedBy(
Iterable< E> other) → Iterable< E> inherited - Возвращает ленивую конкатенацию этой итерируемой последовательности и
other. - forEach(
void action(E element)) → void inherited - Вызывает
actionдля каждого элемента этой итерируемой последовательности в порядке итерации. - intersection(
Set< Object?> other) → Set< E> inherited - Создаёт новое множество, являющееся пересечением этого множества и
other. - join(
[String separator = ""]) → String inherited - Преобразует каждый элемент в String и объединяет строки.
- lastWhere(
bool test(E element), {E orElse()?}) → E inherited - Возвращает последний элемент, удовлетворяющий заданному предикату
test. - lookup(
Object? object) → E? inherited - Если в множестве есть объект, равный
object, возвращает его. - map<
T>( T toElement(E e)) → Iterable< T> inherited - Текущие элементы этой итерируемой последовательности, преобразованные с помощью
toElement. - noSuchMethod(
Invocation invocation) → dynamic inherited - Вызывается при обращении к несуществующему методу или свойству.
- reduce(
E combine(E value, E element)) → E inherited - Сводит коллекцию к одному значению, последовательно объединяя её элементы с помощью переданной функции.
- remove(
Object? value) → bool inherited - Удаляет
valueиз множества. - removeAll(
Iterable< Object?> elements) → void inherited - Удаляет из этого множества каждый элемент из
elements. - removeWhere(
bool test(E element)) → void inherited - Удаляет из этого множества все элементы, удовлетворяющие
test. - retainAll(
Iterable< Object?> elements) → void inherited - Удаляет из этого множества все элементы, которых нет в
elements. - retainWhere(
bool test(E element)) → void inherited - Удаляет из этого множества все элементы, не удовлетворяющие
test. - singleWhere(
bool test(E element), {E orElse()?}) → E inherited - Возвращает единственный элемент, удовлетворяющий
test. - skip(
int count) → Iterable< E> inherited - Возвращает Iterable, содержащую все элементы, кроме первых
count. - skipWhile(
bool test(E value)) → Iterable< E> inherited - Возвращает
Iterable, пропускающую начальные элементы, пока выполняетсяtest. - take(
int count) → Iterable< E> inherited - Возвращает ленивую итерируемую последовательность из первых
countэлементов этой последовательности. - takeWhile(
bool test(E value)) → Iterable< E> inherited - Возвращает ленивую итерируемую последовательность из начальных элементов, удовлетворяющих
test. - toList(
{bool growable = true}) → List< E> inherited - Создаёт List, содержащий элементы этой Iterable.
- toSet(
) → Set< E> inherited - Создаёт Set с теми же элементами и поведением, что и у этой
Set. - toString(
) → String inherited - Строковое представление этого объекта.
- union(
Set< E> other) → Set< E> inherited - Создаёт новое множество, содержащее все элементы этого множества и
other. - where(
bool test(E element)) → Iterable< E> inherited - Возвращает новую ленивую Iterable со всеми элементами, удовлетворяющими предикату
test. - whereType<
T>( ) → Iterable< T> inherited - Возвращает новую ленивую Iterable со всеми элементами типа
T.
Операторы
- operator ==(
Object other) → bool inherited - Оператор равенства.
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-collection/HashSet-class.html