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/8/7 8:45:56 阅读更多 →
ZBrush细节优化与拓扑重构实战技巧

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

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

2026/8/7 8:45:56 阅读更多 →
深度学习分类任务核心:Softmax函数原理、PyTorch实现与实战指南

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

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

2026/8/7 8:45:56 阅读更多 →

最新新闻

游戏战斗数值模拟实战:用CombatCalculator实现数据驱动的技能平衡

游戏战斗数值模拟实战:用CombatCalculator实现数据驱动的技能平衡

如果你是一名游戏开发者,尤其是负责战斗系统、数值平衡或技能设计的同学,最近是不是总被这几个问题困扰: 新设计的技能,伤害公式写出来了,但实际打出来是秒天秒地还是刮痧,心里完全没底,只能等…

2026/8/7 9:30:19 阅读更多 →
AI搜索CLI:用自然语言革新开发者信息检索与工具选型

AI搜索CLI:用自然语言革新开发者信息检索与工具选型

1. 从“敲命令”到“说人话”:AI搜索CLI的范式革命 如果你和我一样,是个常年泡在终端里的开发者,对 grep 、 find 、 curl 这些命令熟稔于心,那你肯定也经历过这样的时刻:想找一个特定的技术解决方案&#xff0c…

2026/8/7 9:30:19 阅读更多 →
AI辅助服务器迁移实战:低成本高效完成运维任务

AI辅助服务器迁移实战:低成本高效完成运维任务

1. 项目背景:当技术小白遇上服务器迁移 去年双十一买的腾讯云轻量应用服务器快到期了,续费价格涨了三倍多。作为非技术出身的个人站长,我盯着后台"迁移镜像"的按钮发愁——这玩意儿要是搞砸了,我那个日均3000PV的小博客…

2026/8/7 9:30:19 阅读更多 →
Python构建咖啡销售数据分析系统:从数据处理到智能预测

Python构建咖啡销售数据分析系统:从数据处理到智能预测

1. 项目背景与核心价值咖啡行业近年来呈现爆发式增长,全球年销售额已突破千亿美元规模。在这个数据驱动的时代,传统销售记录方式已经难以满足精细化运营需求。我们团队开发的这套咖啡销售数据分析系统,正是为了解决以下行业痛点:销…

2026/8/7 9:30:19 阅读更多 →
足球比赛复盘:如何分析场面占优却输球的深层原因

足球比赛复盘:如何分析场面占优却输球的深层原因

这类标题一看就是足球赛后复盘,核心不是复述比分,而是拆解“为什么看起来场面不差,但结果输了”,以及“个人表现和团队结果的关系”。如果你刚看完比赛,或者赛后讨论时感觉“明明某人踢得不错,怎么球队就输…

2026/8/7 9:30:18 阅读更多 →
从API调用到系统架构:AI Agent Harness工程化实战指南

从API调用到系统架构:AI Agent Harness工程化实战指南

1. 从“研发员”到“架构师”:Agent Harness岗位的深层解读最近在AI圈子里,DeepSeek-Agent Harness研发员这个岗位突然火了起来,成了不少技术人讨论的焦点。乍一看,这只是一个具体的职位名称,但如果你只把它理解成一个…

2026/8/7 9:29:16 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →