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

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.lryc.cn/news/2403760.html

相关文章:

  • 基于JWT+SpringSecurity整合一个单点认证授权机制
  • IDEA 打开文件乱码
  • 第2章:Neo4j安装与配置
  • Shell 命令及运行原理 + 权限的概念(7)
  • 抽奖系统核心——抽奖管理
  • Android 蓝牙通信
  • 任务调度器-关于中心化调度 vs 去中心化调度的核心区别
  • 二、【ESP32开发全栈指南:ESP32 GPIO深度使用】
  • 力扣刷题(第四十九天)
  • 机器学习:集成学习概念和分类、随机森林、Adaboost、GBDT
  • 基于J2EE架构的在线考试系统设计与实现【源码+文档】
  • tpc udp http
  • 联想拯救者R9000P 网卡 Realtek 8852CE Ubuntu/Mint linux 系统睡眠后,无线网卡失效
  • Python训练营打卡 Day46
  • 解决微软应用商店 (Microsoft store) 打不开,无网络连接的问题!
  • 《影像引导下骨盆创伤手术的术前骨折复位规划:基于学习的综合流程》|文献速递-深度学习医疗AI最新文献
  • 如何使用Webhook触发器,在 ONLYOFFICE 协作空间构建智能工作流
  • 跟我学c++中级篇——理解类型推导和C++不同版本的支持
  • 什么是DevOps智能平台的核心功能?
  • Windows账户管理,修改密码,创建帐户...(无需密码)
  • 软件功能模块归属论证方法
  • 【Java后端基础 005】ThreadLocal-线程数据共享和安全
  • 【C语言】C语言经典小游戏:贪吃蛇(下)
  • NTT印地赛车:数字孪生技术重构赛事体验范式,驱动观众参与度革命
  • 30.【新型数据架构】-区块链数据架构
  • 使用docker 安装Redis 带配置文件(x86和arm)版本
  • 在CSDN发布AWS Proton解决方案:实现云原生应用的标准化部署
  • 小白的进阶之路系列之十----人工智能从初步到精通pytorch综合运用的讲解第三部分
  • [蓝桥杯]整理玩具
  • C++11 Move Constructors and Move Assignment Operators 从入门到精通