golang的HashSet
最新推荐文章于 2023-03-05 01:30:41 发布
七八月份的太阳
最新推荐文章于 2023-03-05 01:30:41 发布
2806
收藏
分类专栏:
golang
Golang
文章标签:
HashSet
golang
57 篇文章
4 订阅
58 篇文章
7 订阅
import (
"errors"
"reflect"
)
type HashSet struct {
//数据载体
data map[interface{}]interface{}
//数据类型
dataType string
//数据数量
count int
}
/**
初始化并指定存储对象的类型
*/
func NewHashSet(dataType string) *HashSet {
hashSet := new(HashSet)
hashSet.data = make(map[interface{}]interface{})
hashSet.dataType = dataType
return hashSet
}
/**
返回数据数量
*/
func (hashSet *HashSet) Size() int {
return hashSet.count
}
/**
返回数据类型
*/
func (hashSet *HashSet) GetDataType() interface{} {
return hashSet.dataType
}
/**
添加元素
*/
func (hashSet *HashSet) Add(key interface{}) error {
err := hashSet.checkData(key)
if err != nil {
return err
}
_, ok := hashSet.data[key]
if ok {
return errors.New("DataIsExist")
}
hashSet.count += 1
hashSet.data[key] = key
return nil
}
/**
删除指定Key元素
*/
func (hashSet *HashSet) Remove(key interface{}) error {
err := hashSet.checkData(key)
if err != nil {
return err
}
value, ok := hashSet.data[key]
if ok {
delete(hashSet.data, value)
hashSet.count -= 1
return nil
}
return errors.New("NotFoundKey")
}
/**
判断key是否存在
*/
func (hashSet *HashSet) Contains(key interface{}) (bool, error) {
err := hashSet.checkData(key)
if err != nil {
return false, err
}
_, ok := hashSet.data[key]
if ok {
return true, nil
} else {
return false, nil
}
}
/**
重置
*/
func (hashSet *HashSet) Clear() {
hashSet.count = 0
hashSet.data = make(map[interface{}]interface{})
}
/**
判断添加元素是否为指定类型
*/
func (hashSet *HashSet) checkData(data interface{}) error {
if data == nil {
return errors.New("dataIsNil")
}
dataTypeof := reflect.TypeOf(data).String()
if hashSet.dataType != dataTypeof {
return errors.New("UnsupportedTypes")
}
return nil
}
import "fmt"
func main() {
hashSet := NewHashSet("string")
err := hashSet.Add("1")
if err != nil {
fmt.Println(err)
}
fmt.Println(hashSet.Size())
err = hashSet.Add(1)
if err != nil {
fmt.Println(err)
}
fmt.Println(hashSet.Size())
err = hashSet.Remove("1")
if err != nil {
fmt.Println(err)
}
fmt.Println(hashSet.Size())
err = hashSet.Add("1")
if err != nil {
fmt.Println(err)
}
fmt.Println(hashSet.Size())
hashSet.Clear()
fmt.Println(hashSet.Size())
err = hashSet.Add("1")
if err != nil {
fmt.Println(err)
}
fmt.Println(hashSet.Size())
value, err := hashSet.Contains("1")
if err != nil {
fmt.Println(err)
} else {
fmt.Println(value)
}
}
1
UnsupportedTypes
1
0
1
0
1
true