news 2026/4/23 12:46:58

【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/4/13 7:12:10

Dify智能体平台工作流中嵌入Qwen-Image节点实战

Dify智能体平台工作流中嵌入Qwen-Image节点实战 在数字内容爆发式增长的今天&#xff0c;企业对视觉素材的需求早已从“有图就行”转向“高频、高质量、个性化”的生产模式。传统设计流程依赖人工反复修改、沟通成本高、响应慢&#xff0c;尤其在电商促销、社交媒体运营等场景…

作者头像 李华
网站建设 2026/4/22 18:07:51

CTF-NetA完全指南:快速掌握网络安全流量自动化分析神器

在CTF网络安全竞赛中&#xff0c;你是否曾因复杂的网络流量分析而焦头烂额&#xff1f;面对加密的pcapng文件&#xff0c;手动解密的困难经历让无数参赛者望而却步。现在&#xff0c;这一切都将成为过去——CTF-NetA作为专为CTF比赛打造的流量分析利器&#xff0c;将彻底改变你…

作者头像 李华
网站建设 2026/4/23 12:46:52

Screen Translator终极指南:5个技巧轻松实现屏幕翻译

Screen Translator终极指南&#xff1a;5个技巧轻松实现屏幕翻译 【免费下载链接】ScreenTranslator Screen capture, OCR and translation tool. 项目地址: https://gitcode.com/gh_mirrors/sc/ScreenTranslator 想要轻松翻译屏幕上的任何文字吗&#xff1f;Screen Tra…

作者头像 李华
网站建设 2026/4/22 17:14:29

VSCode插件助力FLUX.1-dev开发:智能补全与调试一体化环境搭建

VSCode插件助力FLUX.1-dev开发&#xff1a;智能补全与调试一体化环境搭建 在AI生成内容&#xff08;AIGC&#xff09;迅猛发展的今天&#xff0c;文生图模型早已不再是科研象牙塔中的实验品&#xff0c;而是广泛应用于创意设计、广告制作乃至影视预演的生产力工具。从Stable Di…

作者头像 李华
网站建设 2026/4/23 12:29:27

Diskinfo下载官网工具读取GPU显存状态配合Qwen3-VL-8B

Diskinfo下载官网工具读取GPU显存状态配合Qwen3-VL-8B 在当前AI应用快速落地的浪潮中&#xff0c;一个常被忽视却极为关键的问题浮出水面&#xff1a;如何在有限的硬件资源下&#xff0c;稳定、高效地运行多模态大模型&#xff1f;尤其是在边缘设备或中小型服务器上部署视觉-语…

作者头像 李华