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

Go语言进阶④:Go的数据结构和Java的有啥不一样


Go语言进阶④:数据结构大冒险!

——写惯了 Java 的你,看 Go 的容器世界会头皮发麻吗?


一、写在前面:Java 程序员的容器情怀

在 Java 世界,你可能习惯了满手的 ArrayListHashMapSetQueue 等容器类,配合着各种范型、接口和 Lambda 表达式,写得风生水起。

可一到 Go,乍一看:“Go 是不是还在用石器时代的数组?”

别慌!Go 的容器虽然看起来“朴素”,但简洁实用,背后也藏着很多门道。接下来我们就从 Java 程序员的视角,手把手对比讲清楚 Go 的常用数据结构。


二、数组(Array)和切片(Slice):切出来才好吃

Java:

int[] arr = new int[3]; // 固定长度数组
arr[0] = 1;List<Integer> list = new ArrayList<>(); // 动态数组
list.add(1);
list.add(2);

Go:

arr := [3]int{1, 2, 3}       // 数组,长度固定,元素类型是 int
arr2 := [...]int{4, 5, 6}    // 由编译器自动推断长度slice := []int{1, 2, 3}      // 切片,更常用,长度可变
slice = append(slice, 4, 5)  // 追加元素,自动扩容
补充说明:
  • []int{} 是切片(动态数组),类似 Java 的 ArrayList<Integer>

  • append() 函数可以自动扩容,背后有一套内存管理机制;

  • 数组([3]int)是值类型,赋值会复制整个数组;

  • 切片是引用类型,共享底层数组。

Java 对比提示:

特性JavaGo
数组是否可变不可扩容[3]int 也不可扩容
动态数组ArrayList[]T 切片
传参是否拷贝引用传递数组是值传递,切片是引用语义

三、Map:没有 HashMap 类,但内置超好用

Java:

Map<St

相关文章:

  • 力扣-17.电话号码的字母组合
  • LeetCode--24.两两交换链表中的结点
  • Java 常用 API 分类总结(算法竞赛考前速记篇)- 适用于算法竞赛(如 CCF CSP、蓝桥杯、NOI)
  • 音频剪辑软件少之又少好用
  • 13-Oracle 23ai Vector Search VECTOR数据类型和实操
  • 计算机组成原理:计算机发展历程
  • 东芝Toshiba e-STUDIO2110AC打印机信息
  • 基于IDA的bindiff使用
  • BeckHoff(倍福) PLC 顺控器执行超时故障在北尔触摸屏显示的实现
  • gis geoserver 地图发布
  • “硅仙人”吉姆·凯勒(Jim Keller)
  • Riverpod与GetX的优缺点对比
  • iview框架主题色的应用
  • OGG 23ai for DAA 部署与补丁升级
  • C++常用的自动化测试库
  • 从游戏到自动驾驶:互联网时代强化学习如何让机器学会自主决策?
  • Android 相对布局管理器(RelativeLayout)
  • 自然语言处理 目录篇
  • STM32开发,创建线程栈空间大小判断
  • 深圳SMT贴片工艺优化关键步骤
  • 小程序制作网站/网站排名提升软件
  • 网页设计字体代码/杭州seo
  • 南宁学网站建设/百度网站收录链接提交
  • 自己搭建服务器访问国外网站/品牌型网站设计推荐
  • 电影网站怎么做不犯法/做网页设计的软件
  • wordpress搭建商城网站/交换链接营销