算法Go语言描述📌datastruct📌4_map&set.txt
Map数据结构的底层实现通常有两种:
HashMap基于哈希表实现,采用链表解决哈希冲突,无法支持排序,增删查改的性能为O(1)。
TreeMap基于红黑树实现,有序的同时保证数据操作的性能为O(logn) 。
Golang内置map结构基于哈希表实现。

========== ========== 利用map的key不重复特性来实现set ========== ==========

type Set[T comparable] map[T]struct{}

func NewSet[T comparable](items []T) Set[T] {
	s := make(Set[T])
	for _, item := range items {
		s[item] = struct{}{}
	}
	return s
}

func (s Set[T]) Add(v T) {
	s[v] = struct{}{}
}

func (s Set[T]) Remove(v T) {
	delete(s, v)
}

func (s Set[T]) Clear() {
	clear(s)
}

func (s Set[T]) Size() int {
	return len(s)
}

func (s Set[T]) Has(v T) bool {
	_, ok := s[v]
	return ok
}

func (s Set[T]) Items() []T {
	items := make([]T, 0, s.Size())
	for item := range s {
		items = append(items, item)
	}
	return items
}