news 2026/6/9 21:25:46

【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/10 3:30:59

Argon主题在ImmortalWrt中的3个常见显示问题完整解决方案指南

Argon主题在ImmortalWrt中的3个常见显示问题完整解决方案指南 【免费下载链接】luci-theme-argon Argon is a clean and tidy OpenWrt LuCI theme that allows users to customize their login interface with images or videos. It also supports automatic and manual switch…

作者头像 李华
网站建设 2026/6/10 14:05:39

Tsuru PaaS平台终极入门指南:从零开始部署云原生应用

Tsuru PaaS平台终极入门指南&#xff1a;从零开始部署云原生应用 【免费下载链接】tsuru Open source and extensible Platform as a Service (PaaS). 项目地址: https://gitcode.com/gh_mirrors/ts/tsuru Tsuru是一个开源且可扩展的平台即服务(PaaS)解决方案&#xff0…

作者头像 李华
网站建设 2026/6/10 13:04:21

Git Commit规范在FLUX.1-dev项目协作开发中的重要性

Git Commit规范在FLUX.1-dev项目协作开发中的重要性 在人工智能研发的最前沿&#xff0c;像 FLUX.1-dev 这样的大型文生图模型早已不再是单一算法的实验产物&#xff0c;而是集成了复杂架构、海量数据和多任务能力的系统级工程。它基于创新的 Flow Transformer 架构&#xff0…

作者头像 李华
网站建设 2026/6/10 13:39:44

不想重复训练?使用HuggingFace镜像网站快速加载FLUX.1-dev

不想重复训练&#xff1f;使用HuggingFace镜像网站快速加载FLUX.1-dev 在AI生成内容&#xff08;AIGC&#xff09;领域&#xff0c;图像生成模型的迭代速度令人目不暇接。但对大多数开发者来说&#xff0c;真正困扰他们的并不是“有没有好模型”&#xff0c;而是“能不能用得上…

作者头像 李华
网站建设 2026/6/10 13:04:11

清华源无法访问时的应急解决方案汇总

清华源无法访问时的应急解决方案汇总 在人工智能项目开发中&#xff0c;一个常见的“噩梦”场景是&#xff1a;你正准备启动训练任务&#xff0c;CI 流水线突然卡在 pip install torch 这一步&#xff0c;错误提示指向清华源超时或 DNS 解析失败。更糟的是&#xff0c;团队其他…

作者头像 李华