Sets

A set is a data structure that can store elements and has no repeated values. It is a computer implementation of the mathematical concept of a finite set. Unlike most other collection types, rather than retrieving a specific element from a set, one typically tests an element for membership in a set. This structure is often used to ensure that no duplicates are present in a container.

Implements Container interface.

  1. type Set interface {
  2. Add(elements ...interface{})
  3. Remove(elements ...interface{})
  4. Contains(elements ...interface{}) bool
  5. containers.Container
  6. // Empty() bool
  7. // Size() int
  8. // Clear()
  9. // Values() []interface{}
  10. }

HashSet

A set backed by a hash table (actually a Go’s map). It makes no guarantees as to the iteration order of the set.

Implements Set, JSONSerializer and JSONDeserializer interfaces.

  1. package main
  2. import "github.com/emirpasic/gods/sets/hashset"
  3. func main() {
  4. set := hashset.New() // empty
  5. set.Add(1) // 1
  6. set.Add(2, 2, 3, 4, 5) // 3, 1, 2, 4, 5 (random order, duplicates ignored)
  7. set.Remove(4) // 5, 3, 2, 1 (random order)
  8. set.Remove(2, 3) // 1, 5 (random order)
  9. set.Contains(1) // true
  10. set.Contains(1, 5) // true
  11. set.Contains(1, 6) // false
  12. _ = set.Values() // []int{5,1} (random order)
  13. set.Clear() // empty
  14. set.Empty() // true
  15. set.Size() // 0
  16. }

TreeSet

A set backed by a red-black tree to keep the elements ordered with respect to the comparator.

Implements Set, IteratorWithIndex, EnumerableWithIndex, JSONSerializer and JSONDeserializer interfaces.

  1. package main
  2. import "github.com/emirpasic/gods/sets/treeset"
  3. func main() {
  4. set := treeset.NewWithIntComparator() // empty (keys are of type int)
  5. set.Add(1) // 1
  6. set.Add(2, 2, 3, 4, 5) // 1, 2, 3, 4, 5 (in order, duplicates ignored)
  7. set.Remove(4) // 1, 2, 3, 5 (in order)
  8. set.Remove(2, 3) // 1, 5 (in order)
  9. set.Contains(1) // true
  10. set.Contains(1, 5) // true
  11. set.Contains(1, 6) // false
  12. _ = set.Values() // []int{1,5} (in order)
  13. set.Clear() // empty
  14. set.Empty() // true
  15. set.Size() // 0
  16. }

LinkedHashSet

A set that preserves insertion-order. Data structure is backed by a hash table to store values and doubly-linked list to store insertion ordering.

Implements Set, IteratorWithIndex, EnumerableWithIndex, JSONSerializer and JSONDeserializer interfaces.

  1. package main
  2. import "github.com/emirpasic/gods/sets/linkedhashset"
  3. func main() {
  4. set := linkedhashset.New() // empty
  5. set.Add(5) // 5
  6. set.Add(4, 4, 3, 2, 1) // 5, 4, 3, 2, 1 (in insertion-order, duplicates ignored)
  7. set.Add(4) // 5, 4, 3, 2, 1 (duplicates ignored, insertion-order unchanged)
  8. set.Remove(4) // 5, 3, 2, 1 (in insertion-order)
  9. set.Remove(2, 3) // 5, 1 (in insertion-order)
  10. set.Contains(1) // true
  11. set.Contains(1, 5) // true
  12. set.Contains(1, 6) // false
  13. _ = set.Values() // []int{5, 1} (in insertion-order)
  14. set.Clear() // empty
  15. set.Empty() // true
  16. set.Size() // 0
  17. }