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/9 20:14:58

PlantUML在线编辑器:基于代码的UML建模解决方案深度解析

PlantUML在线编辑器&#xff1a;基于代码的UML建模解决方案深度解析 【免费下载链接】plantuml-editor PlantUML online demo client 项目地址: https://gitcode.com/gh_mirrors/pl/plantuml-editor PlantUML在线编辑器提供了一种革命性的UML建模方式&#xff0c;通过简…

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

《从零开始构建智能体》—— 实践与理论结合的智能体入门指南

《从零开始构建智能体》—— 实践与理论结合的智能体入门指南 项目介绍 在2024年&#xff0c;"百模大战"即将拉开序幕&#xff0c;而2025年则标志着"Agent 元年"的到来。随着技术的不断发展&#xff0c;构建更智能的智能体应用将成为新的焦点。然而&…

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

FP8量化技术解析:Stable Diffusion 3.5为何能兼顾速度与画质

FP8量化技术解析&#xff1a;Stable Diffusion 3.5为何能兼顾速度与画质 在生成式AI的浪潮中&#xff0c;Stable Diffusion系列模型已经从研究原型演变为工业级内容生成的核心引擎。然而&#xff0c;随着模型能力不断增强&#xff0c;其对显存和计算资源的需求也呈指数级增长—…

作者头像 李华
网站建设 2026/6/10 1:16:29

PyTorch安装教程GPU加速篇:基于CUDA 12.1的最新实践

PyTorch安装教程GPU加速篇&#xff1a;基于CUDA 12.1的最新实践 在深度学习领域&#xff0c;算力就是生产力。随着大模型时代的到来&#xff0c;动辄数十亿参数的神经网络让传统CPU训练变得遥不可及——一次完整训练可能需要数周甚至更久。而一块RTX 4090&#xff0c;在正确配…

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

STL_unordered_map

它是现代C编程中使用最频繁、性能最高的容器之一&#xff0c;理解其工作原理至关重要。1. 核心概念&#xff1a;什么是 unordered_map&#xff1f;std::unordered_map 是一个无序的关联式容器&#xff0c;存储的是键值对。它的核心特性与 std::set 形成鲜明对比&#xff1a;键的…

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

Matlab【独家原创】基于IVY-CNN-LSTM-Attention-SHAP可解释性分析的分类预测

目录 1、代码简介 2、代码运行结果展示 3、代码获取 1、代码简介 (IVY-CNN-LSTM-AttentionSHAP)基于常青藤算法优化卷积神经网络结合长短期记忆神经网络结合注意力机制的数据多输入单输出SHAP可解释性分析的分类预测模型 由于IVY-CNN-LSTM-Attention在使用SHAP分析时速度较…

作者头像 李华