Класс LinkedHashSet< E>
LinkedHashSet — это реализация набора Set, основанная на хэш-таблице.
По умолчанию реализация Set — это LinkedHashSet.
Эта реализация также отслеживает порядок вставки элементов, и итерация происходит в порядке добавления (с начала во вставке к концу).
Элементы в LinkedHashSet должны иметь согласованные реализации Object.== и Object.hashCode. Это означает, что оператор == должен определять стабильное отношение эквивалентности на элементах (рефлексивное, симметричное, транзитивное и согласованное со временем), а значение hashCode должно быть одинаковым для объектов, которые считаются равными согласно ==.
Итерация по элементам выполняется в порядке вставки элементов. Элемент, добавленный позже другого, будет встречаться позже в итерации. Добавление уже существующего элемента не меняет его положение в порядке итерации, но удаление и повторное добавление элемента сделают его последним элементом в итерации.
Большинство простых операций над LinkedHashSet выполняются за постоянное (потенциально амортизированное) время: add, contains, remove и length, при условии, что хэш-коды объектов распределены равномерно.
Примечание: Не изменяйте набор (добавляйте или удаляйте элементы) во время выполнения операции над этим набором, например, в функциях, вызываемых во время forEach или containsAll, или во время итерации по набору.
Не изменяйте элементы таким образом, чтобы изменилось их равенство (и, следовательно, их хэш-код) пока они находятся в наборе. Некоторые специализированные типы наборов могут быть более допускающими в отношении равенства, в этом случае они должны документировать свое поведение и ограничения.
Пример:
final planets = <String>{}; // LinkedHashSet Для добавления данных в набор используйте add или addAll.
final uranusAdded = planets.add('Uranus'); // true
planets.addAll({'Venus', 'Mars', 'Earth', 'Jupiter'});
print(planets); // {Uranus, Venus, Mars, Earth, Jupiter} Для проверки, пуст ли набор, используйте isEmpty или isNotEmpty. Для поиска количества элементов в наборе используйте length.
print(planets.isEmpty); // false print(planets.length); // 5
Для проверки, содержит ли набор элемент с определённым значением, используйте contains.
final marsExists = planets.contains('Mars'); // true Метод forEach вызывает функцию с каждым элементом набора.
planets.forEach(print); // Uranus // Venus // Mars // Earth // Jupiter
Для создания копии набора используйте toSet.
final copySet = planets.toSet();
print(copySet); // {Uranus, Venus, Mars, Earth, Jupiter} Для удаления элемента используйте remove.
final removedValue = planets.remove('Mars'); // Mars
print(planets); // {Uranus, Venus, Earth, Jupiter} Для удаления нескольких элементов одновременно используйте removeWhere или removeAll.
planets.removeWhere((element) => element.startsWith('E'));
print(planets); // {Uranus, Venus, Jupiter} Для удаления всех элементов в этом наборе, которые не соответствуют условию, используйте retainWhere.
planets.retainWhere((element) => element.contains('Jupiter'));
print(planets); // {Jupiter} Для удаления всех элементов и очистки набора используйте clear.
planets.clear();
print(planets.isEmpty); // true
print(planets); // {} См. также:
- Set — это общий интерфейс коллекции, в котором каждый объект может встречаться только один раз.
- HashSet — порядок объектов в итерации не гарантирован.
- SplayTreeSet — итерация объектов в отсортированном порядке.
- Реализуемые типы
-
-
Set<
E>
-
Set<
- Доступные расширения
Конструкторы
- LinkedHashSet({bool equals(E, E)?, int hashCode(E)?, bool isValidKey(dynamic)?}) factory
- Создаёт набор с упорядочиванием по вставкам, используя предоставленные
equalsиhashCode. - LinkedHashSet.from(Iterable elements) factory
- Создаёт набор LinkedHashSet, содержащий все
elements. - LinkedHashSet.identity() factory
- Создаёт набор с упорядочиванием по вставкам, основанный на идентичности.
- LinkedHashSet.of(Iterable<
E> elements) factory - Создаёт набор LinkedHashSet из
elements.
Свойства
- first → E только для чтения, унаследованно
- Возвращает первый элемент.
- hashCode → int только для чтения, унаследованно
- Хэш-код этого объекта.
- isEmpty → bool только для чтения, унаследованно
- Является ли эта коллекция пустой.
- isNotEmpty → bool только для чтения, унаследованно
- Содержит ли эта коллекция хотя бы один элемент.
- iterator → Iterator<
E> только для чтения, переопределено - Предоставляет итератор, который перебирает элементы в порядке вставки.
- last → E только для чтения, унаследованно
- Возвращает последний элемент.
- length → int только для чтения, унаследованно
- Возвращает количество элементов в итерируемом объекте.
- runtimeType → Type только для чтения, унаследованно
- Представление runtime-типа объекта.
- single → E только для чтения, унаследованно
- Проверяет, что этот итерируемый объект имеет только один элемент, и возвращает этот элемент.
Методы
- 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 override - Выполняет функцию для каждого элемента множества.
- 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.18.5/dart-collection/LinkedHashSet-class.html