Arrays类
-
Arrays相关介绍
- Arrays类是数组的工具类java.util.Arrays
- 由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作
- 使用方法可查看JDK帮助文档
- Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而不用使用对象来调用(注意是“不用”而不是“不能”)
- Arrays类具有以下常用功能:
- 给数组赋值:通过fill方法
- 对数组排序:通过sort方法,按升序
- 比较数组:通过equals方法比较数组中元素值是否相等
- 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作
-
代码实例:
package com.ibelifly.array; import java.util.Arrays; public class ArrayDemo7 { public static void main(String[] args) { int[] a={12,324,54,23,6457,27,26,85,21,68,426,28}; //打印数组元素 System.out.println(Arrays.toString(a)); //对数组进行排序 升序 Arrays.sort(a); System.out.println(Arrays.toString(a)); //给数组赋值(填充) Arrays.fill(a,0); System.out.println(Arrays.toString(a)); } }
冒泡排序
-
图例:
-
代码实例:
package com.ibelifly.array; import java.lang.reflect.Array; import java.util.Arrays; public class ArrayDemo8 { public static void main(String[] args) { int[] a={5,6,3,6,7,85,7,3,57,8}; int[] array=sort(a); System.out.println(Arrays.toString(array)); } //冒泡循环:两层循环,外层冒泡轮数,里层依次比较 //1.比较数组中两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置 //2.每一次比较,都会产生出一个最大,或者最小的数字 //3.下一轮可以少一次排序 //4.依次循环,直到结束 public static int[] sort(int[] array){ //定义第三临时变量 int temp=0; //外层循环:判断冒泡轮数 for (int i = 0; i < array.length-1; i++) { boolean flag=false; //通过flag标识位减少没有意义的比较(优化做法) //内层循环:比较两个数,如果第一个数比第二个数大,则交换位置 for (int j = 0; j < array.length-1-i; j++) { if (array[j]<array[j+1]){ temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; flag=true; } } if (flag==false){ break; } } return array; } }
稀疏数组
-
引言
-
需求:编写五子棋游戏中,有存盘退出和续上盘的功能
-
分析问题:因为该二维数组的很多值默认值是0,因此记录了很多没有意义的数据
-
解决:稀疏数组
-
-
稀疏数组介绍
-
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组
-
稀疏数组的处理方式是:
- 记录数组一共有几行几列,有多少个不同的值
- 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
-
如下图,左边是原始数组,右边是稀疏数组
-
-
代码实例:
package com.ibelifly.array; public class ArrayDemo9 { public static void main(String[] args) { //编写原始棋盘 //1.创建一个二维数组11*11,0:没有棋子,1:黑棋,2:白棋 int[][] array1=new int[11][11]; array1[1][2]=1; array1[2][3]=2; //输出原始的数组 System.out.println("输出原始的数组:"); for (int[] ints : array1) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } //转换为稀疏数组保存 //1.获取有效值的个数 int sum=0; for (int i = 0; i < array1.length; i++) { for (int j = 0; j < array1[i].length; j++) { if (array1[i][j]!=0){ sum++; } } } System.out.println("有效值的个数:"+sum); //2.创建一个存放稀疏数组 int[][] array2=new int[sum+1][3]; array2[0][0]=11; array2[0][1]=11; array2[0][2]=sum; //3.遍历二维数组,将非零的值存放在稀疏数组中 int count=0; for (int i = 0; i < array1.length; i++) { for (int j = 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]; } } } //4.输出稀疏数组 System.out.println("稀疏数组为:"); for (int[] ints : array2) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } //还原稀疏数组 //1.读取稀疏数组 int[][] array3=new int[array2[0][0]][array2[0][1]]; for (int i = 1; i < array2.length; i++) { array3[array2[i][0]][array2[i][1]]= array2[i][2]; } //2.还原稀疏数组 System.out.println("还原后的数组为:"); for (int[] ints : array3) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } } }
重要声明:本篇文章整理自B站狂神说Java