A MutableSet implemented as a hash set stored in an Array of singly linked lists. Each element is assigned an index of the array according to its hash code. The hash code of an element is defined by Object.hash.

The stability of a HashSet controls its iteration order:

  • A linked set has a stable and meaningful order of iteration. The elements of the set form a linked list, where new elements are added to the end of the linked list. Iteration of the set follows this linked list, from least recently added elements to most recently added elements.
  • An unlinked set has an unstable iteration order that may change when the set is modified. The order itself is not meaningful to a client.

The management of the backing array is controlled by the given hashtable.

By: Stéphane Épardaud, Gavin King

no subtypes hierarchy

Constructors
HashSetSource Codeshared HashSet(Stability stability = ..., Hashtable hashtable = ..., {Element*} elements = ...)

Create a new HashSet with the given initial elements.

Parameters:
  • stability = linked

    Determines whether this is a linked hash set with a stable iteration order, defaulting to linked (stable).

  • hashtable = Hashtable()

    Performance-related settings for the backing array.

  • elements = {}

    The initial elements of the set, defaulting to no initial elements.

copySource Codeshared copy(HashSet<Element> hashSet, Stability stability = ..., Hashtable hashtable = ...)

Create a new HashSet with the same initial elements as the given hashSet.

Parameters:
  • hashSet

    The HashSet to copy.

  • stability = hashSet.stability

    Determines whether this is a linked hash set with a stable iteration order, defaulting to the stability of the copied HashSet.

  • hashtable = Hashtable()

    Performance-related settings for the backing array.

Attributes
firstSource Codeshared actual Element? first

The first element returned by the iterator, if any, or null if this stream is empty. For a stream with an unstable iteration order, a different value might be produced each time first is evaluated.

hashSource Codeshared actual Integer hash

The hash value of the value, which allows the value to be an element of a hash-based set or key of a hash-based map. Implementations must respect the constraint that:

  • if x==y then x.hash==y.hash.

Therefore, a class which refines equals must also refine hash.

Because the Integer type is platform-dependent a compiler for a given platform is permitted to further manipulate the calculated hash for an object, and the resulting hash may differ between platforms.

Refines Identifiable.hash ultimately refines Object.hash
lastSource Codeshared actual Element? last

The last element returned by the iterator, if any, or null if this stream is empty. In the case of an infinite stream, this operation never terminates; furthermore, this default implementation iterates all elements, which might be very expensive.

sizeSource Codeshared actual Integer size

The number of elements returned by the iterator of this stream, if the iterator terminates. In the case of an infinite stream, this operation never terminates.

Inherited Attributes
Attributes inherited from: Object
Attributes inherited from: Collection<Element>
Attributes inherited from: Iterable<Element,Absent>
Attributes inherited from: Set<Element>
Methods
addSource Codeshared actual Boolean add(Element element)

Add the given element to this set, returning true if the element was not already a member of this set, or false otherwise.

addAllSource Codeshared actual Boolean addAll({Element*} elements)

Add the given elements to this set, returning true if any of the given elements was not already a member of this set, or false otherwise.

clearSource Codeshared actual void clear()

Remove every element from this set, leaving an empty set with no elements.

cloneSource Codeshared actual HashSet<Element> clone()

A shallow copy of this collection, that is, a collection with identical elements which does not change if this collection changes. If this collection is immutable, it is acceptable to return a reference to this collection. If this collection is mutable, a newly instantiated collection must be returned.

Refines MutableSet.clone ultimately refines Collection.clone
complementSource Codeshared actual HashSet<Element> complement<Other>(Set<Other> set)
given Other satisfies Object

Returns a new Set containing all the elements in this set that are not contained in the given Set.

containsSource Codeshared actual Boolean contains(Object element)

Returns true if the given value belongs to this Category, that is, if it is an element of this Category, or false otherwise.

For most Categorys the following relationship is satisfied by every pair of elements x and y:

  • if x==y, then x in category == y in category

However, it is possible to form a useful Category consistent with some other equivalence relation, for example ===. Therefore implementations of contains() which do not satisfy this relationship are tolerated.

Refines Set.contains ultimately refines Category.contains
countSource Codeshared actual Integer count(Boolean selecting(Element element))

Produces the number of elements in this stream that satisfy the given predicate function (selecting). For an infinite stream, this method never terminates.

eachSource Codeshared actual void each(void step(Element element))

Call the given function (step) for each element of this stream, passing the elements in the order they occur in this stream.

For example:

words.each((word) {
    print(word.lowercased);
    print(word.uppercased);
});

Has the same effect as the following for loop:

for (word in words) {
    print(word.lowercased);
    print(word.uppercased);
}

For certain streams this method is highly efficient, surpassing the performance of for loops on the JVM. Thus, each() is sometimes preferred in highly performance-critical low-level code.

equalsSource Codeshared actual Boolean equals(Object that)

Determine if two values are equal. Implementations should respect the constraints that:

  • if x===y then x==y (reflexivity),
  • if x==y then y==x (symmetry),
  • if x==y and y==z then x==z (transitivity).

Furthermore it is recommended that implementations ensure that if x==y then x and y have the same concrete class.

A class which explicitly refines equals() is said to support value equality, and the equality operator == is considered much more meaningful for such classes than for a class which simply inherits the default implementation of identity equality from Identifiable.

Refines Identifiable.equals ultimately refines Object.equals
exclusiveUnionSource Codeshared actual HashSet<Element|Other> exclusiveUnion<Other>(Set<Other> set)
given Other satisfies Object

Returns a new Set containing only the elements contained in either this set or the given Set, but no element contained in both sets.

intersectionSource Codeshared actual HashSet<Element&Other> intersection<Other>(Set<Other> set)
given Other satisfies Object

Returns a new Set containing only the elements that are present in both this set and the given Set and that are instances of the intersection Element&Other of the element types of the two sets.

Note that, according to this definition, and even though 1==1.0 evaluates to true (Integer.equals), the expression

set { 1 } & set { 1.0 }

produces the empty set {}.

iteratorSource Codeshared actual Iterator<Element> iterator()

An iterator for the elements belonging to this stream.

removeSource Codeshared actual Boolean remove(Element element)

Remove an element from this set, returning true if the element was previously a member of the set.

unionSource Codeshared actual HashSet<Element|Other> union<Other>(Set<Other> set)
given Other satisfies Object

Returns a new Set containing all the elements of this set and all the elements of the given Set.

Note that it is possible for two sets of disjoint element type to be considered to have elements in common. For example, since 1==1.0 evaluates to true (Integer.equals), the expression

set { 1 } | set { 1.0 }

produces the set { 1 }.

Refines Set.union
Inherited Methods
Methods inherited from: Object
Methods inherited from: Category<Element>
Methods inherited from: Collection<Element>
Methods inherited from: Iterable<Element,Absent>
Methods inherited from: MutableSet<Element>
Methods inherited from: Set<Element>
Methods inherited from: SetMutator<Element>