当前位置: 首页 > news >正文

仓颉编程语言基础集合类型详解:HashSet深度解析

文章目录

      • 1. 基本特性与初始化
        • 初始化方式:
      • 2. 核心操作 元素遍历
      • 3. 元素修改
      • 4. 引用特性
      • 5. 类型约束
    • HashSet典型应用场景
    • 性能优化建议

1. 基本特性与初始化

HashSet是仓颉语言中实现唯一元素集合的核心类型,具有以下特点:

  • 元素唯一性:自动保证集合内无重复元素
  • 无序存储:不保证元素的存储顺序与插入顺序一致
  • 高性能查询:基于哈希表实现,查找时间复杂度接近O(1)
初始化方式:
import std.collection.*// 空集合
let set1 = HashSet<String>()  
// 预分配容量
let set2 = HashSet<Int64>(100)  
// 从数组初始化
let set3 = HashSet<Int64>([0, 1, 2])  
// 使用生成函数
let set4 = HashSet<Int64>(10, {x: Int64 => (x * x)})

2. 核心操作 元素遍历

let mySet = HashSet<Int64>([3, 1, 2])
for (elem in mySet) {println("当前元素: ${elem}")  // 输出顺序可能与插入顺序不同
}

存在性检查

println("包含元素2: ${mySet.contains(2)}")  // 输出true
println("包含元素5: ${mySet.contains(5)}")  // 输出false

获取集合大小

println("集合大小: ${mySet.size}")  // 输出3

3. 元素修改

添加元素

mySet.add(4)  // 成功添加
mySet.add(3)  // 无效操作(已存在)
mySet.add(all: [5, 6, 6])  // 批量添加,自动去重

删除元素

mySet.remove(1)  // 删除指定元素

4. 引用特性

HashSet是引用类型,多个变量引用同一实例时会共享修改:

let setA = HashSet<Int64>([1, 2, 3])
let setB = setA
setB.add(4)
println(setA)  // 输出[1, 2, 3, 4]

5. 类型约束

HashSet的元素类型必须实现Hashable和Equatable接口:

// 合法类型

HashSet<Int64>([1, 2, 3])  
HashSet<String>(["a", "b"])

// 非法类型(若自定义类型未实现接口)

// HashSet<MyClass>(...)  // 编译错误

HashSet典型应用场景

数据去重:

let duplicates = [1, 1, 2, 3, 3]
let unique = collectHashSet(duplicates).toArray()  // [1, 2, 3]

快速查找:

let userIDs = HashSet<Int64>([1001, 1002, 1003])
if (userIDs.contains(inputID)) {// 快速验证用户ID是否存在
}

集合运算:

let setA = HashSet([1, 2, 3])
let setB = HashSet([2, 3, 4])
let union = setA.union(setB)  // 并集
let intersect = setA.intersect(setB)  // 交集

性能优化建议

预分配空间:对于已知元素数量的集合,构造时指定初始容量。
选择合适的哈希对象:简单类型(如Int64/String)的哈希性能最佳。
避免频繁扩容:大规模数据插入前使用reserve方法预分配空间。

http://www.dtcms.com/a/574416.html

相关文章:

  • 无代码网站开发网页怎么生成长图
  • 户县网站建设福建省网站建设绩效排名
  • 基于MQTT和Sparkplug B的UNS系统的元数据管理
  • Origin将Y偏移图升级为3D瀑布图
  • 职业学院网站建设方案做网站怎么搭建环境
  • 网站副标题wordpresswordpress做个米表
  • 开淘宝店怎么做充值网站杭州巴顿品牌设计
  • 北京市城乡建设协会官方网站开发网站如何选需要
  • VASP 教程:使用 VASP 进行机器学习力场训练
  • 受限长度路径搜索算法
  • H265 vs AV1 vs H266 rdoq对比
  • 在Linux服务器上安装CVAT (Docker 28.5.1)
  • 四川学校网站建设农业公司网站建设
  • 网站建设报价购物凡科建站提示网站建设中
  • 基于STM32的多模态智能门锁系统设计与实现
  • 淮北网站建设如何提高 网站的点击量
  • OpenAI Agent 工具全面开发者指南——从 RAG 到 Computer Use —— 深入解析全新 Responses API
  • 国外文件传输网站新浪企业邮箱
  • 强制将析构函数放到类外定义
  • 虚幻引擎5 GAS开发俯视角RPG游戏 P07-06 能力输入的回调
  • 中企动力做网站贵吗wordpress wp-cumulus
  • 网站没有备案信息该怎么做气象网站建设
  • 6 AutoGen 多 Agent 协作框架:构建智能团队协作系统
  • 昆明做商城网站多少钱网站统计功能设计
  • 优秀个人网站图片如何建立一个小程序的网站
  • 对比28种时间序列预测算法在某个数据集上的表现-全套源码
  • LibreTorrent 4.0.1 | 一款开源磁力软件,不限速,支持RSS
  • 电子商务网站建设与管理的总结做网站用哪种语言好
  • 阿里巴巴网站策划书全球速卖通网址
  • 电子商务网站建设风格seo优化公司