news 2026/6/25 4:57:03

【Java数组】--数组实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Java数组】--数组实战

个人主页

文章目录

    • 前言
    • 一、Arrays工具类
      • 1.1 toString
      • 1.2 sort
      • 1.3自己写
        • 1.3.1 输出
        • 1.3.2 排序
          • 冒泡排序是什么?
          • 实战一下
          • 优化
    • 二、稀疏数组
    • 三、结尾

前言

本文将简单讲解Array的使用以及实战、冒泡排序以及稀疏数组,帮助你快速了解数组

一、Arrays工具类

这是Java提供的专门用于操作数组的工具类,包含很多静态方法

1.1 toString

转换成字符串

int[]arr={1,2,3};int[][]deep={{1,2},{3,4}};String[]strs={"a","b","c"};// 一维数组System.out.println(Arrays.toString(arr));// [1, 2, 3]// 多维数组System.out.println(Arrays.deepToString(deep));// [[1, 2], [3, 4]]// 对象数组System.out.println(Arrays.toString(strs));// [a, b, c]

1.2 sort

数组排序

int[]numbers={5,3,8,1,2};String[]words={"banana","apple","cherry"};// 基本类型数组排序Arrays.sort(numbers);// 升序排序// 结果: [1, 2, 3, 5, 8]// 对象数组排序(实现Comparable接口)Arrays.sort(words);// 结果: ["apple", "banana", "cherry"]// 指定范围排序int[]arr={5,3,8,1,2,7};Arrays.sort(arr,1,4);// 对下标1到3排序// 结果: [5, 1, 3, 8, 2, 7]// 自定义比较器排序Integer[]nums={5,3,8,1,2};Arrays.sort(nums,(a,b)->b-a);// 降序// 结果: [8, 5, 3, 2, 1]

1.3自己写

其实上述的功能也能自己写一个类似的

1.3.1 输出
publicclassArrayDemo01{publicstaticvoidmain(String[]args){int[]a={1,2,3,4,5,6};printArray(a);}publicstaticvoidprintArray(int[]arr){for(inti=0;i<arr.length;i++){if(i==0){System.out.print("["+arr[i]+", ");}elseif(i==arr.length-1){System.out.println(arr[i]+"]");}else{System.out.print(arr[i]+", ");}}}}
1.3.2 排序

排序有很多方法,而冒泡排序无疑是最出名的排序算法之一。

冒泡排序是什么?
  • 将相邻的两个数进行比较,如果不一样则根据升序降序互换。
  • 两层循环,外层冒泡轮数,里层依次比较
  • 时间复杂度为O(n2)。

冒泡排序还是很简单的,一个简单的图片就能说明了。

实战一下
publicclassArrayDemo02{publicstaticvoidmain(String[]args){int[]arr={5,4,2,3,8};System.out.println(sort(arr));}// 冒泡排序// 1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换它们的位置// 2.每一次比较,都会产生出一个最大,或者最小的数字// 3.下一轮则可以少一次排序// 4.依次循环,直接结束!publicstaticStringsort(int[]arr){// 外层循环,判断我们这个要走多少次;for(inti=0;i<=arr.length-1;i++){// 内层循环,比较判断两个数,如果第一个数,比第二个数大,则交换位置for(intj=arr.length-1;j>0;j--){inttemp=0;if(arr[j-1]>arr[j]){temp=arr[j-1];arr[j-1]=arr[j];arr[j]=temp;}}}// for (int i = 0; i < arr.length; i++) {// if (i==0){// System.out.print("["+arr[i]+", ");// }else if (i == arr.length-1){// System.out.print(arr[i]+"]");// }else {// System.out.print(arr[i]+", ");// }// }Stringarray="";for(inti=0;i<arr.length;i++){if(i==0){array+="["+arr[i]+", ";}elseif(i==arr.length-1){array+=arr[i]+"]";}else{array+=arr[i]+", ";}}returnarray;}}
优化

给它加一个flag

publicclassArrayDemo03{publicstaticvoidmain(String[]args){int[]arr={5,4,2,3,8};int[]sorts=sort(arr);System.out.println(Arrays.toString(sorts));}publicstaticint[]sort(int[]arr){inttemp=0;for(inti=0;i<arr.length-1;i++){booleanflag=false;// 通过flag标识位减少没有意义的比较for(intj=0;j<arr.length-1-i;j++){if(arr[j]>arr[j+1]){temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;flag=true;}}if(!flag){break;}}returnarr;}}

二、稀疏数组

  • 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
  • 稀疏数组的处理方式是:
    • 记录数组一共有几行几列,有多少个不同值
    • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
publicclassArrayDemo04{publicstaticvoidmain(String[]args){// 1. 创建一个二维数组 11*11 0:没有棋子 1:黑棋 2:白棋int[][]array1=newint[11][11];array1[1][2]=1;array1[2][3]=2;// 输出原始的数组System.out.println("输出原始的数组:");for(int[]ints:array1){for(intanInt:ints){System.out.print(anInt+"\t");}System.out.println();}System.out.println("============================");// 转换为稀疏数组来保存// 获取有效值的个数intsum=0;for(inti=0;i<array1.length;i++){for(intj=0;j<array1[i].length;j++){if(array1[i][j]!=0){sum++;}}}System.out.println("有效值的个数:"+sum);// 2.创建一个稀疏数组的数组int[][]array2=newint[sum+1][3];array2[0][0]=11;array2[0][1]=11;array2[0][2]=sum;// 遍历二维数组,将非零的值,存放到稀疏数组中intcount=0;for(inti=0;i<array1.length;i++){for(intj=0;j<array1[i].length;j++){if(array1[i][j]!=0){count++;array2[count][0]=i;array2[count][1]=j;array2[count][2]=array1[i][j];}}}// 输出稀疏数组System.out.println("稀疏数组:");for(inti=0;i<array2.length;i++){System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]);}System.out.println("==========================");System.out.println("还原稀疏数组:");int[][]array3=newint[array2[0][0]][array2[0][1]];// 2.给其中的元素还原它的值for(inti=1;i<array2.length;i++){array3[array2[i][0]][array2[i][1]]=array2[i][2];}// 3.打印System.out.println("还原的数组:");for(int[]ints:array3){for(intanInt:ints){System.out.print(anInt+"\t");}System.out.println();}}}

三、结尾

以上就是Arrays的基本用法、冒泡排序讲解、稀疏数组的实现。从工具类的实操到排序算法的拆解,再到稀疏数组的空间优化技巧,希望能帮你掌握数组的使用。

⭐ 如果这对你有帮助,不妨收藏和分享一下!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 7:25:54

git下载安装教程升级版:加入vLLM推理加速模块

vLLM推理加速引擎实战部署&#xff1a;从Git配置到高性能模型服务构建 在当前大语言模型&#xff08;LLM&#xff09;广泛应用的背景下&#xff0c;如何将一个强大的开源模型真正“跑起来”&#xff0c;并且稳定、高效地服务于生产环境&#xff0c;已经成为企业AI团队面临的核心…

作者头像 李华
网站建设 2026/6/25 12:09:30

Java工程智能化破局:飞算科技JavaAI构建开发新范式

在软件开发领域&#xff0c;Java作为应用范围广泛的编程语言&#xff0c;其工程开发环节正面临效率瓶颈凸显、代码质量波动、人力成本攀升等多重挑战。推动Java工程智能化升级&#xff0c;已成为行业实现高质量发展亟待解决的核心议题。飞算数智科技&#xff08;深圳&#xff0…

作者头像 李华
网站建设 2026/6/25 13:58:58

使用DiskInfo下载官网模型文件:Stable Diffusion 3.5 FP8资源获取路径

使用DiskInfo下载官网模型文件&#xff1a;Stable Diffusion 3.5 FP8资源获取路径 在AI生成图像技术飞速演进的今天&#xff0c;越来越多的内容创作者、开发者和企业开始尝试部署本地化的文生图系统。然而&#xff0c;一个现实问题始终横亘在理想与落地之间&#xff1a;如何在消…

作者头像 李华
网站建设 2026/6/25 6:41:41

移动端UI组件的高效应用与性能优化策略

移动端UI组件的高效应用与性能优化策略 【免费下载链接】coloruicss 鲜亮的高饱和色彩&#xff0c;专注视觉的小程序组件库 项目地址: https://gitcode.com/gh_mirrors/co/coloruicss 在移动应用开发中&#xff0c;UI组件的合理运用直接影响用户体验和应用性能。当前开发…

作者头像 李华
网站建设 2026/6/24 16:22:24

Rebuilding a Magazine Site Flow with Bingo (Admin Notes)

Rebuilding a Magazine Site Flow with Bingo – Newspaper Magazine WordPress Theme I picked this theme for one reason: my content was growing, but my site’s reading experience wasn’t. The problem wasn’t “design quality” or “missing features.” It was …

作者头像 李华
网站建设 2026/6/25 11:15:14

FLUX.1-dev图文生成黑科技:打造高细节、强提示遵循的艺术创作平台

FLUX.1-dev图文生成黑科技&#xff1a;打造高细节、强提示遵循的艺术创作平台 在AI绘画工具遍地开花的今天&#xff0c;用户早已不再满足于“画得像”——真正打动创作者的是那些能读懂复杂指令、精准还原脑海画面、细节丰富且风格统一的作品。然而现实是&#xff0c;多数文生…

作者头像 李华