2020-06-15 18:04:01 +08:00
|
|
|
|
/*
|
|
|
|
|
|
* @Author : huangzj
|
|
|
|
|
|
* @Time : 2020/6/15 16:16
|
|
|
|
|
|
* @Description:
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
package set
|
|
|
|
|
|
|
|
|
|
|
|
import "sync"
|
|
|
|
|
|
|
2020-12-15 09:49:54 +08:00
|
|
|
|
type ISet interface {
|
|
|
|
|
|
Add(i interface{})
|
|
|
|
|
|
AddAll(list ...interface{})
|
|
|
|
|
|
Remove(i interface{})
|
|
|
|
|
|
Contains(i interface{}) bool
|
|
|
|
|
|
IsEmpty() bool
|
|
|
|
|
|
GetAllSet() []interface{}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-06-15 18:04:01 +08:00
|
|
|
|
type Set struct {
|
|
|
|
|
|
setMap sync.Map //用来存储元素的map
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (set *Set) Add(i interface{}) {
|
|
|
|
|
|
set.setMap.Store(i, nil)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-12-15 09:49:54 +08:00
|
|
|
|
func (set *Set) AddAll(list ...interface{}) {
|
|
|
|
|
|
for _, item := range list {
|
|
|
|
|
|
set.Add(item)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-06-15 18:04:01 +08:00
|
|
|
|
func (set *Set) Remove(i interface{}) {
|
|
|
|
|
|
set.setMap.Delete(i)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (set *Set) Contains(i interface{}) bool {
|
|
|
|
|
|
_, has := set.setMap.Load(i)
|
|
|
|
|
|
return has
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (set *Set) IsEmpty() bool {
|
|
|
|
|
|
length := 0
|
|
|
|
|
|
set.setMap.Range(func(key, value interface{}) bool {
|
|
|
|
|
|
length = length + 1
|
|
|
|
|
|
return true
|
|
|
|
|
|
})
|
|
|
|
|
|
return length == 0
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (set *Set) GetAllSet() []interface{} {
|
|
|
|
|
|
list := make([]interface{}, 0)
|
|
|
|
|
|
set.setMap.Range(func(key, value interface{}) bool {
|
|
|
|
|
|
list = append(list, key)
|
|
|
|
|
|
return true
|
|
|
|
|
|
})
|
|
|
|
|
|
return list
|
|
|
|
|
|
}
|