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

go语言中数组、map和切片的异同

在Go语言中,数组、切片(slice)和映射(map)是三种常用的数据结构,它们在用途和特性上有显著差异。以下是它们的异同总结:


相同点

  1. 集合类型:三者都用于存储一组数据。

  2. 元素访问:支持通过索引(数组/切片)或键(map)直接访问元素。

  3. 类型安全:元素类型固定(数组和切片元素类型一致,map的键和值类型固定)。

  4. 复合字面量初始化:均可通过字面量语法初始化,例如:

    arr := [3]int{1, 2, 3}        // 数组
    sli := []int{1, 2, 3}         // 切片
    m := map[string]int{"a": 1}   // map

不同点

特性数组(Array)切片(Slice)映射(Map)
类型性质值类型(赋值/传参时复制整个数组)引用类型(底层基于数组,传递时共享数据)引用类型(传递时共享底层哈希表)
长度固定长度,声明时确定(如 [3]int动态长度,可自动扩容(通过 append动态长度,随键值对增减自动扩展
内存分配连续内存块,栈或堆上分配结构体(包含指针、长度、容量),指向底层数组哈希表实现,内存结构较复杂
键/索引类型整数索引(从0开始)整数索引(从0开始)任意可哈希类型(如 intstring, 结构体等)
初始化方式直接声明或字面量(需指定长度)通过 make、切片表达式或字面量(无需长度)必须通过 make 或字面量初始化(否则为 nil
容量管理固定容量有容量(cap)概念,可动态扩容(通常翻倍)无容量概念,自动处理底层存储扩展
性能特点访问速度最快(连续内存,无额外开销)接近数组,但追加/扩容可能触发复制哈希表查询(O(1) 平均复杂度,但存在哈希冲突)
零值所有元素为类型零值(如 [3]int{} → [0,0,0]nil(未初始化,无底层数组)nil(未初始化,无法直接添加键值对)
线程安全非并发安全非并发安全非并发安全
典型用途固定大小的数据块(如矩阵、配置)动态集合(如列表、动态数组)键值关联(如字典、缓存)

关键细节

  1. 数组

    • 长度是类型的一部分,[3]int 和 [5]int 是不同的类型。

    • 值传递导致复制开销,适合小数据集。

  2. 切片

    • 底层依赖数组,多个切片可共享同一数组(修改相互影响)。

    • append 可能触发扩容,返回新切片(需重新赋值)。

    • 空切片([]int{})和 nil 切片(未初始化)行为类似但不等价。

  3. 映射

    • 键必须支持 == 操作,禁止使用切片、函数等不可哈希类型。

    • 遍历顺序随机(Go 设计特性),不能依赖顺序。

    • 并发读写需加锁或使用 sync.Map


示例对比

// 数组
arr := [3]int{1, 2, 3}  // 长度固定为3

// 切片
sli := make([]int, 2, 5) // 长度2,容量5
sli = append(sli, 4)     // 长度变为3,容量可能扩容

// 映射
m := make(map[string]int)
m["key"] = 10            // 动态添加键值对

总结

  • 数组:定长、值类型,适合固定大小的数据块。

  • 切片:动态数组、引用类型,灵活处理动态集合。

  • 映射:键值对、哈希表实现,适合快速查找和关联数据。


http://www.kler.cn/a/591633.html

相关文章:

  • Java---JavaSpringMVC解析(1)
  • 【ES6】04-对象 + 类 + 模板字符串 + 解构 + 字符串
  • 贝叶斯分层回归(Bayesian Hierarchical Regression)是一种基于贝叶斯统计理论的数据分析方法
  • 【css酷炫效果】纯CSS实现虫洞穿越效果
  • 力扣128. 最长连续序列 || 452. 用最少数量的箭引爆气球
  • 如何使用 DeepEval 优化 Elasticsearch 中的 RAG 检索
  • 搭建主从服务器
  • pandas中excel自定义单元格颜色
  • 利用余弦相似度在大量文章中找出抄袭的文章
  • 深度学习框架PyTorch——从入门到精通(3)数据集和数据加载器
  • 3.5 Spring Boot邮件服务:从基础发送到模板邮件进阶
  • 国内首台太空采矿机器人亮相,宇宙资源开发迈入新阶段
  • 【Java/数据结构】ArrayList的实现及使用
  • 【linux】用SSH连接服务器进行通信
  • 北斗+多技术融合地面沉降监测:精准守护城市安全
  • 计算机网络的框架结构
  • Python+Django网页前后端rsp云端摄像头人数监控系统
  • Ubuntu连接到SSH(live server和desktop版本同样适用)适用于20-24各个版本
  • 基于ChatGPT、DeepSeek、GIS与Python机器学习的地质灾害风险评估、易发性分析、信息化建库及灾后重建
  • 设备管理VTY(Telnet、SSH)