画江湖之 Go 学习篇 [go 实现类似 java 的 set] 某个大佬问的问题 自身也补充下基础
代码演示 具体看代码解释#
package main
//支持任意类型添加
import (
"fmt"
"sync"
)
type inter interface{}/定义一个接口
type Set struct {
m map[inter]bool//定义一个任意类型的map 集合
sync.RWMutex//定义一个互斥锁
}
//定一个方法 返回一个集合
func New() *Set {
return &Set{
m: map[inter]bool{},
}
}
//添加方法
func (s *Set) Add(item inter) {
s.Lock()//锁住
defer s.Unlock()//延迟释放锁
s.m[item] = true
}
//删除集合
func (s *Set) Remove(item inter) {
s.Lock()
s.Unlock()
delete(s.m, item)
}
//判断这个集合中有没有这个元素
func (s *Set) Has(item inter) bool {
s.RLock()
defer s.RUnlock()
_, 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("aa")
for i, k := range s.List() {
fmt.Println(i, k)
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: