go实现set

该博客介绍了如何利用Go语言内置的map类型实现一个HashSet。通过创建一个以空结构体为value的map,实现了添加、删除、查找、遍历和清空等基本操作。这种实现方式利用了map键的唯一性,提供了高效的数据存储和查询功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Go的内置类型map,利用其键唯一的特性实现set。因为map的本质是hash表,所以基于map实现的set也就是HashSet。(在Java中的HashSet也是用同样的道理实现)

package main

import "fmt"

/**
以空结构体作为map的value来实现,空结构体不占内存
*/

type Empty struct{}

var empty Empty

// Set类型
type Set struct {
	m map[int]Empty
}

// 添加元素
func (s *Set) Add(val int) {
	s.m[val] = empty // 使用一个empty单例作为所有键的值
}

// 删除元素
func (s *Set) Remove(val int) {
	delete(s.m, val)
}

// 获取长度
func (s *Set) Size() int {
	return len(s.m)
}

// 清空set
func (s *Set) Clear() {
	s.m = make(map[int]Empty)
}

// 查看某个元素是否存在
func (s *Set) Exist(val int) (ok bool) {
	_, ok = s.m[val]
	return
}

// 遍历set
func (s *Set) Traverse() {
	for v := range s.m {
		fmt.Println(v)
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值