Java 数组操作
1. 数组遍历操作数组时最常见的操作就是遍历。通过for 循环即可遍历数组——因为数组的每个元素都可以通过索引来访问因此使用标准的for循环就能完成遍历publicclassMain{publicstaticvoidmain(String[]args){int[]ns{1,4,9,16,25};for(inti0;ins.length;i){intnns[i];System.out.println(n);}}}上述for循环中初始条件i 0因为索引从0开始。1.1 标准 for 循环遍历第一种方式使用标准for循环通过索引访问每个元素。1.2 for-each 循环遍历第二种方式是使用for-each 循环直接迭代数组的每个元素publicclassMain{publicstaticvoidmain(String[]args){int[]ns{1,4,9,16,25};for(intn:ns){System.out.println(n);}}}1.3 打印数组内容直接打印数组变量得到的是数组在 JVM 中的引用地址int[]ns{1,1,2,3,5,8};//[Ib4c966a要打印数组的元素内容可以使用 for-each 循环int[]ns{1,1,2,3,5,8};for(intn:ns){System.out.print(n, );}然而使用 for-each 循环逐元素打印仍比较繁琐。Java 标准库提供了Arrays.toString()可以快速打印数组内容// 遍历数组importjava.util.Arrays;publicclassMain{publicstaticvoidmain(String[]args){int[]ns{1,1,2,3,5,8};System.out.println(Arrays.toString(ns));}}1.4 练习倒序遍历数组请按倒序遍历数组并打印每个元素publicclassMain{publicstaticvoidmain(String[]args){int[]ns{1,4,9,16,25};for(intins.length-1;i0;i--){System.out.println(ns[i]);}}}2. 数组排序对数组进行排序是程序中非常基础的需求。常用的排序算法有冒泡排序、插入排序和快速排序。2.1 冒泡排序算法以冒泡排序为例对整型数组从小到大排序的核心思路如下2.1.1 算法步骤比较相邻的元素如果第一个比第二个大升序排序则交换它们两个逐对处理对每一对相邻元素做同样的工作从第一对到最后一对本轮结束后最后的元素会是最大的数排除已排定元素针对所有元素重复以上步骤排除最后已排定的元素循环直至有序持续对越来越少的数据重复上述步骤直到没有任何一对数字需要比较为止。2.1.2 完整代码实现importjava.util.Arrays;publicclassMain{publicstaticvoidmain(String[]args){int[]ns{28,65,33,95,3,7,65};System.out.println(排序前Arrays.toString(ns));//排序之前for(inti0;ins.length-1;i){for(intj0;jns.length-i-1;j){if(ns[j]ns[j1]){// 交换ns[j]和ns[j1]:inttmpns[j];ns[j]ns[j1];ns[j1]tmp;}}System.out.println(第(i1)轮后Arrays.toString(ns));}}}2.1.3 执行过程详解排序前数组[28, 65, 33, 95, 3, 7, 65]第 1 轮详解i 0j 值比较 (ns[j] ns[j1])结果数组状态028 65false不交换[28, 65, 33, 95, 3, 7, 65]165 33true交换[28, 33, 65, 95, 3, 7, 65]265 95false不交换[28, 33, 65, 95, 3, 7, 65]395 3true交换[28, 33, 65, 3, 95, 7, 65]495 7true交换[28, 33, 65, 3, 7, 95, 65]595 65true交换[28, 33, 65, 3, 7, 65, 95]冒泡排序的核心特点每一轮循环后当前未排定部分的最大值会被“浮”到末尾因此下一轮循环的结束位置可前移一位无需再比较已排定的尾部元素。2.2 变量交换的正确方式特别注意交换两个变量的值必须借助临时变量。如下写法是错误的//ns[j] 1; ns[j1] 2;ns[j]ns[j1];//ns[j] 2ns[j1]ns[j];//ns[j1] 2并未完成交换正确写法如下intx1;inty2;inttx;xy;yt;//完成交换2.3 使用 JDK 内置排序实际上Java 标准库已内置排序功能只需调用Arrays.sort()即可实现排序importjava.util.Arrays;publicclassMain{publicstaticvoidmain(String[]args){int[]ns{28,33,65,3,7,65,95};Arrays.sort(ns);System.out.println(Arrays.toString(ns));}}Arrays.sort()执行后变量ns指向的数组内容会被直接改变原地排序。2.4 练习实现降序排序请思考如何用冒泡排序实现降序排序// 降序排序importjava.util.Arrays;publicclassMain{publicstaticvoidmain(String[]args){int[]ns{28,12,89,73,65,18,96,50,8,36};// 排序前:System.out.println(Arrays.toString(ns));for(inti0;ins.length-1;i){for(intj0;jns.length-i-1;j){if(ns[j]ns[j1]){inttempns[j];ns[j]ns[j1];ns[j1]temp;}}}System.out.println(Arrays.toString(ns));if(Arrays.toString(ns).equals([96, 89, 73, 65, 50, 36, 28, 18, 12, 8])){System.out.println(测试成功);}else{System.out.println(测试失败);}}}** j值**比较 (ns[j] ns[j1])结果数组状态028 65false不交换[28, 65, 33, 95, 3, 7, 65]16533true 交换[28, 33, 65, 95, 3, 7, 65]26595false不交换[28, 33, 65, 95, 3, 7, 65]3953true 交换[28, 33, 65, 3, 95, 7, 65]4957true 交换[28, 33, 65, 3, 7, 95, 65]59565true 交换[28, 33, 65, 3, 7, 65,95]​冒泡排序的特点是每一轮循环后最大的一个数被交换到末尾因此下一轮循环就可以“刨除”最后的数每一轮循环都比上一轮循环的结束位置靠前一位。另外注意到交换两个变量的值必须借助一个临时变量。像这么写是错误的//ns[j] 1; ns[j1] 2;ns[j]ns[j1];//ns[j] 2ns[j1]ns[j];//ns[j1] 2 并没有完成交换正确写法是intx1;inty2;inttx;xy;yt;//完成交换实际上Java标准库内置了排序功能只需要调用JDK提供的Arrays.sort()就可以排序importjava.util.Arrays;publicclassMain{publicstaticvoidmain(String[]args){int[]ns{28,33,65,3,7,65,95};Arrays.sort(ns);System.out.println(Arrays.toString(ns));}}Arrays.sort()排序后变量ns指向的数组内容被改变。练习请思考如何实现对数组进行降序排序冒泡排序降序// 降序排序importjava.util.Arrays;publicclassMain{publicstaticvoidmain(String[]args){int[]ns{28,12,89,73,65,18,96,50,8,36};// 排序前:System.out.println(Arrays.toString(ns));for(inti0;ins.length-1;i){for(intj0;jns.length-i-1;j){if(ns[j]ns[j1]){inttempns[j];ns[j]ns[j1];ns[j1]temp;}}}System.out.println(Arrays.toString(ns));if(Arrays.toString(ns).equals([96, 89, 73, 65, 50, 36, 28, 18, 12, 8])){System.out.println(测试成功);}else{System.out.println(测试失败);}}}3. 多维数组3.1 二维数组二维数组就是数组的数组。定义一个二维数组的示例如下publicclassMain{publicstaticvoidmain(String[]args){int[][]ns{{1,2,3,4},{4,5,6,7},{7,8,9,0}};System.out.println(ns.length);}}因为ns包含 3 个数组所以ns.length为 3。ns在内存中的结构如下┌───┬───┬───┬───┐ ┌───┐ ┌──▶│1│2│3│4│ ns ─────▶│░░░│──┘ └───┴───┴───┴───┘ ├───┤ ┌───┬───┬───┬───┐ │░░░│─────▶│4│5│6│7│ ├───┤ └───┴───┴───┴───┘ │░░░│──┐ ┌───┬───┬───┬───┐ └───┘ └──▶│7│8│9│0│ └───┴───┴───┴───┘3.1.1 访问与打印二维数组定义一个普通数组arr0然后将ns[0]赋值给它即可拿到二维数组中的第一行数据importjava.util.Arrays;publicclassMain{publicstaticvoidmain(String[]args){int[][]ns{{1,2,3,4},{4,5,6,7},{7,8,9,0}};System.out.println(ns.length);//打印二维数组长度System.out.println(ns[0][0]);//访问二维数组的某个元素System.out.println(Arrays.deepToString(ns));//用Arrays.deepToString()打印二维数组int[]arr0ns[0];System.out.println(arr0.length);//打印{1,2,3,4}长度System.out.println(Arrays.toString(arr0));// 输出 [1, 2, 3, 4]}}关键要点使用ns[行][列]来访问二维数组的某个元素使用Arrays.deepToString()可以快速打印多维数组的全部内容ns[i]本身是一个一维数组引用可赋值给普通数组变量。3.2 三维数组三维数组就是二维数组的数组。定义一个三维数组的示例如下int[][][]ns{{{1,2,3},{4,5,6},{7,8,9}},{{10,11},{12,13}},{{14,15,16},{17,18}}};它在内存中的结构如下┌───┬───┬───┐ ┌───┐ ┌─▶│1│2│3│ ┌─▶│░░░│──┘ └───┴───┴───┘ │ ├───┤ ┌───┬───┬───┐ │ │░░░│────▶│4│5│6│ │ ├───┤ └───┴───┴───┘ │ │░░░│──┐ ┌───┬───┬───┐ ┌───┐ │ └───┘ └─▶│7│8│9│ ns ───▶│░░░│──┘ └───┴───┴───┘ ├───┤ ┌───┐ ┌───┬───┐ │░░░│────▶│░░░│────▶│10 │11 │ ├───┤ ├───┤ └───┴───┘ │░░░│──┐ │░░░│──┐ ┌───┬───┐ └───┘ │ └───┘ └─▶│12 │13 │ │ └───┴───┘ │ ┌───┐ ┌───┬───┬───┐ └─▶│░░░│ ───▶│14 │15 │16 │ ├───┤ └───┴───┴───┘ │░░░│──┐ ┌───┬───┐ └───┘ └─▶│17 │18 │ └───┴───┘如果要访问三维数组的某个元素例如ns[2][0][1]只需按索引逐层定位即可找到对应的最终元素15。3.3 练习计算学生平均分使用二维数组表示一组学生的各科成绩请计算所有学生的平均分publicclassMain{publicstaticvoidmain(String[]args){// 用二维数组表示的学生成绩:int[][]scores{{82,90,91},// 学生甲的语数英成绩{68,72,64},// 学生乙的语数英成绩{95,91,89},// ...{67,52,60},{79,81,85},};doubleaverage0;intcount0;for(int[]score:scores){// 使用 for-each 循环遍历每行for(inti:score){averagei;count;}}average/count;System.out.println(average);if(Math.abs(average-77.733333)0.000001){System.out.println(测试成功);}else{System.out.println(测试失败);}}}**第 1 次外层循环**score 变成第一行 {82, 90, 91}。内层循环开始依次把 82、90、91 取出来累加。**第 2 次外层循环**score 变成第二行 {68, 72, 64}。内层循环开始依次把 68、72、64 取出来累加。**第 3 次外层循环**score 变成第三行 {95, 91, 89}……声明本文内容为本人基于 廖雪峰 Java 教程 进行实操学习后的个人笔记与代码实践记录。文中所有知识点、代码示例及讲解均源自上述网站著作权归原作者廖雪峰及其团队所有。本文仅用于个人学习总结与知识分享不涉及任何商业用途。如涉及侵权请联系删除。

相关新闻

前端无剪辑拆卡实战:用代码还原设计稿,告别手动切图

前端无剪辑拆卡实战:用代码还原设计稿,告别手动切图

最近在整理项目时,发现很多开发者对如何高效、规范地管理项目中的“卡片”式组件(比如用户卡片、商品卡片、信息展示卡片)感到头疼。从设计稿到最终页面,往往需要经历手动计算尺寸、拼接图片、处理响应式等一系列繁琐步骤&#xf…

2026/10/17 9:26:45 阅读更多 →
ZBrush细节优化与拓扑重构实战技巧

ZBrush细节优化与拓扑重构实战技巧

1. ZBrush细节优化核心思路解析 在数字雕刻领域,ZBrush早已成为行业标杆工具,但真正决定作品质量的往往是细节处理阶段。从业十年间,我见过太多作品在基础造型阶段表现优异,却在最后30%的细节优化环节功亏一篑。究其原因&#xff…

2026/10/18 14:51:46 阅读更多 →
深度学习分类任务核心:Softmax函数原理、PyTorch实现与实战指南

深度学习分类任务核心:Softmax函数原理、PyTorch实现与实战指南

1. 从困惑到清晰:为什么我们需要Softmax? 如果你刚开始接触深度学习,尤其是分类任务,那么“Softmax”这个名字你一定不陌生,也一定曾被它困扰过。我第一次看到它时,心里也满是问号:为什么模型最…

2026/10/19 4:50:40 阅读更多 →

最新新闻

提示架构师的边界设计:个性化与合规的工程实现

提示架构师的边界设计:个性化与合规的工程实现

2025年,提示工程架构师这个角色比过去任何一年都更强调一个看似矛盾的能力:既要把AI提示系统的个性化做得足够聪明,又要在伦理与合规的约束里把这条路走得足够稳。我这一年里最深的体会是,个性化提示的瓶颈早就不是模型能力&#…

2026/10/20 1:42:07 阅读更多 →
Muse Gadget SDK深度解析:跨平台集成、数据失真与逆向工程实践

Muse Gadget SDK深度解析:跨平台集成、数据失真与逆向工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:42:07 阅读更多 →
浸入边界法与符号距离场结合:OpenFOAM流固耦合仿真实践

浸入边界法与符号距离场结合:OpenFOAM流固耦合仿真实践

简介:sdfibm是一套基于符号距离场与OpenFOAM v6的浸入边界方法C程序包,面向从事流固耦合、多颗粒流仿真的CFD研究者和工程师。程序内置安装脚本与完整示例拓扑,可在个人电脑或HPC集群上编译运行,并通过符号链接快速启用命令。压缩…

2026/10/20 1:42:07 阅读更多 →
家居集团战略落地实操手册:6S系统与管控流程设计

家居集团战略落地实操手册:6S系统与管控流程设计

简介:本资源是一份面向家居制造业集团高管、战略规划与运营管控从业者及管理咨询顾问的专业级PPT方案,聚焦集团层面战略验证与管控体系设计双重任务,解决多元化扩张中战略落地难、总部定位模糊、业务协同不足等核心痛点。文件为1个2.8MB的PPT…

2026/10/20 1:42:07 阅读更多 →
如何本地免费激活 WeMod 专业版:Wand-Enhancer 完整实操指南

如何本地免费激活 WeMod 专业版:Wand-Enhancer 完整实操指南

如何本地免费激活 WeMod 专业版:Wand-Enhancer 完整实操指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 如果你不想再为 WeMod 的订…

2026/10/20 1:42:07 阅读更多 →
【Spring-SSE】除了 SSE 和 WebSocket,还有哪些现代浏览器支持的服务器推送技术?各自的适用边界是什么?

【Spring-SSE】除了 SSE 和 WebSocket,还有哪些现代浏览器支持的服务器推送技术?各自的适用边界是什么?

现代浏览器服务器推送技术全景:风控规则热更新系统的架构选型与边界分析 发布时间:2026年04月01日 适用环境:Spring Boot 3.2.0+、JDK 17、Chrome 120+、Safari 16+、Firefox 115+ 用户问题原文:除了 SSE 和 WebSocket,还有哪些现代浏览器支持的服务器推送技术?各自的适…

2026/10/20 1:41:06 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →