feat(Go-Tool): 创建Set,实现相关方法

This commit is contained in:
huangzj
2020-06-15 18:04:01 +08:00
parent 24c319a182
commit e43051db30
3 changed files with 77 additions and 1 deletions
+2
View File
@@ -19,3 +19,5 @@
2020/5/6 : 创建ArrayUtils测试类,修改对应方法 2020/5/6 : 创建ArrayUtils测试类,修改对应方法
2020/5/7 : 创建timed包相关时间操作工具,实现时间戳、时间格式化操作。创建timed测试类 2020/5/7 : 创建timed包相关时间操作工具,实现时间戳、时间格式化操作。创建timed测试类
2020/6/15: 创建Set,实现相关方法
+30
View File
@@ -0,0 +1,30 @@
/*
* @Author : huangzj
* @Time : 2020/6/15 17:17
* @Description
*/
package set
import (
set2 "Go-Tool/util/set"
"fmt"
"testing"
)
func TestSet(t *testing.T) {
set := new(set2.Set)
set.Add(1)
set.Add(2)
set.Add("123")
fmt.Println(set.Contains(3))
fmt.Println(set.Contains("456"))
fmt.Println(set.Contains("123"))
fmt.Println(set.Contains(1))
set.Remove(1)
set.Remove(3)
for _, v := range set.GetAllSet() {
fmt.Println(v)
}
}
+44
View File
@@ -0,0 +1,44 @@
/*
* @Author : huangzj
* @Time : 2020/6/15 16:16
* @Description
*/
package set
import "sync"
type Set struct {
setMap sync.Map //用来存储元素的map
}
func (set *Set) Add(i interface{}) {
set.setMap.Store(i, nil)
}
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
}