equals method

  1. @override
bool equals(
  1. Set<E>? elements1,
  2. Set<E>? elements2
)
inherited

Compare two elements for being equal.

This should be a proper equality relation.

Implementation

@override
bool equals(T? elements1, T? elements2) => switch ((elements1, elements2)) {
      (var e1, var e2) when identical(e1, e2) => true,
      (null, _) || (_, null) => false,
      (T e1, T e2) => () {
          final HashMap<E, int> counts = HashMap<E, int>(
            equals: _elementEquality.equals,
            hashCode: _elementEquality.hash,
            isValidKey: _elementEquality.isValidKey,
          );

          // Count elements in first collection
          int length = 0;
          for (final E e in e1) {
            final int count = counts[e] ?? 0;
            counts[e] = count + 1;
            length++;
          }

          // Check elements in second collection
          for (final E e in e2) {
            final int? count = counts[e];
            if (count == null || count == 0) return false;
            counts[e] = count - 1;
            length--;
          }

          return length == 0;
        }()
    };