文章目录
- 前言
- 一、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的基本用法、冒泡排序讲解、稀疏数组的实现。从工具类的实操到排序算法的拆解,再到稀疏数组的空间优化技巧,希望能帮你掌握数组的使用。
⭐ 如果这对你有帮助,不妨收藏和分享一下!