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

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
http://www.xdnf.cn/news/12654.html

相关文章:

  • 光学字符识别(OCR)理论概述与实践教程
  • 动目标显示处理解析一(脉冲对消器)
  • Ubuntu 配置使用 zsh + 插件配置 + oh-my-zsh 美化过程
  • 前沿论文汇总(机器学习/深度学习/大模型/搜广推/自然语言处理)
  • 数据类型 -- 字符
  • SQL字符串截取函数全解析:LEFT、RIGHT、SUBSTRING 实战指南
  • 如何使用Jmeter进行压力测试?
  • MySQL-运维篇
  • 隐私计算时代B端页面安全设计:数据脱敏与权限体系升级路径
  • 数据结构算法(C语言)
  • 新能源汽车热管理核心技术解析:冬季续航提升40%的行业方案
  • 开源之夏·西安电子科技大学站精彩回顾:OpenTiny开源技术下沉校园,点燃高校开发者技术热情
  • 华为云Astro中服务编排、自定义模型,页面表格之间有什么关系?如何连接起来?如何操作?
  • 【第七篇】 SpringBoot项目的热部署
  • Mac 安装git心路历程(心累版)
  • Mysql批处理写入数据库
  • 虚幻基础:角色旋转
  • IEC 61347-1:2015 灯控制装置安全通用要求详解
  • Docker基础(一)
  • 轻量级Docker管理工具Docker Switchboard
  • python如何统计图片的颜色分布
  • jenkins gerrit-trigger插件配置
  • JVM 垃圾回收器 详解
  • C++算法训练营 Day11 栈与队列(2)
  • mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
  • 阿里云ACP云计算备考笔记 (4)——企业应用服务
  • 【MySQL】视图、用户管理、MySQL使用C\C++连接
  • 【数据结构初阶】单链表
  • Harmony核心:动态方法修补与.NET游戏Mod开发
  • Java实现飞机射击游戏:从设计到完整源代码