画江湖之 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)
    }
}
go
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!