Конструктор фабрики LinkedHashSet
LinkedHashSet(Создать упорядоченный по вставке хеш-множество, используя предоставленные equals и hashCode.
Предоставленные equals должны определять устойчивое отношение эквивалентности, а hashCode должно быть согласовано с equals. Если методы equals или hashCode не будут работать со всеми объектами, а только с некоторыми экземплярами E, можно использовать предикат isValidKey, чтобы ограничить ключи, к которым применяются функции. Любой ключ, для которого isValidKey возвращает false, автоматически считается не принадлежащим множеству при запросе contains.
Если equals или hashCode опущены, множество использует собственные методы Object.== и Object.hashCode элементов, а isValidKey игнорируется, так как предполагается, что эти операции работают со всеми объектами.
Если вы предоставите один из equals и hashCode, вам, как правило, следует предоставить и другой.
Если предоставленные equals или hashCode функции не будут работать со всеми E объектами, а карта будет использоваться в среде, где в неё передаётся не-E объект, например, в contains, то также следует предоставить функцию isValidKey.
Если isValidKey опущено, оно по умолчанию проверяет, является ли объект экземпляром E. Это означает, что:
new LinkedHashSet<int>(equals: (int e1, int e2) => (e1 - e2) % 5 == 0,
hashCode: (int e) => e % 5)
не требует аргумента isValidKey, потому что по умолчанию принимает только int значения, которые принимаются как equals, так и hashCode.
Если ни equals, ни hashCode, ни isValidKey не предоставлены, по умолчанию isValidKey вместо этого принимает все значения. Предполагается, что стандартные операции равенства и хэш-кода работают со всеми объектами.
Аналогично, если equals является identical, hashCode является identityHashCode, а isValidKey опущено, полученное множество основано на идентичности, а isValidKey по умолчанию принимает все ключи. Такую карту можно создать напрямую, используя LinkedHashSet.identity.
Источник
external factory LinkedHashSet(
{bool equals(E e1, E e2),
int hashCode(E e),
bool isValidKey(potentialKey)});
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-collection/LinkedHashSet/LinkedHashSet.html