# SplayTreeSet<E> constructor

SplayTreeSet<E>([int compare(E key1, E key2), bool isValidKey(dynamic potentialKey) ])

Create a new SplayTreeSet with the given compare function.

If the `compare` function is omitted, it defaults to Comparable.compare, and the elements must be comparable.

A provided `compare` function may not work on all objects. It may not even work on all `E` instances.

For operations that add elements to the set, the user is supposed to not pass in objects that doesn't work with the compare function.

The methods contains, remove, lookup, removeAll or retainAll are typed to accept any object(s), and the `isValidKey` test can used to filter those objects before handing them to the `compare` function.

If `isValidKey` is provided, only values satisfying `isValidKey(other)` are compared using the `compare` method in the methods mentioned above. If the `isValidKey` function returns false for an object, it is assumed to not be in the set.

If omitted, the `isValidKey` function defaults to checking against the type parameter: `other is E`.

## Implementation

    SplayTreeSet([int compare(E key1, E key2), bool isValidKey(potentialKey)])
        : _comparator = compare ?? _defaultCompare<E>(),
          _validKey = isValidKey ?? ((v) => v is E);