package main
import (
"fmt"
"sync"
)
type inter interface {}
type Set struct {
m map[inter]bool
sync.RWMutex
}
func New() *Set {
return &Set{
m : map[inter]bool{},
}
}
func (s *Set)Add(itme inter) {
s.Lock()
defer s.Unlock()
s.m[itme] =true
}
func (s *Set)Remove(item inter) {
s.Lock()
s.Unlock()
delete(s.m,item)
}
func (s *Set) Has(item inter) bool {
s.Lock()
s.Unlock()
_,ok :=s.m[item]
return ok
}
func (s *Set)Len() int {
return len(s.List())
}
func (s *Set) Clear() {
s.Lock()
defer s.Unlock()
s.m = map[inter]bool{}
}
func (s *Set) IsEmpty() bool {
if s.Len() == 0{
return true
}
return false
}
func (s *Set) List() []inter {
s.RLock()
defer s.RUnlock()
list :=[]inter{}
for item:=range s.m{
list =append(list,item)
}
return list
}
func main() {
s :=New()
s.Add(11)
s.Add("222")
l:=s.Len()
for i,k :=range s.List(){
fmt.Println(i,k)
}
fmt.Println(l)
}