From e43051db30158943c97de9657fa554a9512534ae Mon Sep 17 00:00:00 2001 From: huangzj Date: Mon, 15 Jun 2020 18:04:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(Go-Tool)=EF=BC=9A=20=E5=88=9B=E5=BB=BASet?= =?UTF-8?q?=EF=BC=8C=E5=AE=9E=E7=8E=B0=E7=9B=B8=E5=85=B3=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 4 +++- test/set/Set_test.go | 30 ++++++++++++++++++++++++++++++ util/set/Set.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 test/set/Set_test.go create mode 100644 util/set/Set.go diff --git a/readme.md b/readme.md index 2bf34e2..4012ed9 100644 --- a/readme.md +++ b/readme.md @@ -18,4 +18,6 @@ 2020/5/6 : 创建ArrayUtils测试类,修改对应方法 -2020/5/7 : 创建timed包相关时间操作工具,实现时间戳、时间格式化操作。创建timed测试类 \ No newline at end of file +2020/5/7 : 创建timed包相关时间操作工具,实现时间戳、时间格式化操作。创建timed测试类 + +2020/6/15: 创建Set,实现相关方法 \ No newline at end of file diff --git a/test/set/Set_test.go b/test/set/Set_test.go new file mode 100644 index 0000000..f092be5 --- /dev/null +++ b/test/set/Set_test.go @@ -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) + } +} diff --git a/util/set/Set.go b/util/set/Set.go new file mode 100644 index 0000000..ad3cc43 --- /dev/null +++ b/util/set/Set.go @@ -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 +}