数组长度是确定的,数组一旦确定,大小不可更改;
其元素必须是相同类型,不允许出现混合类型;
数组中元素可以是任何数据类型,包括基本类型和引用类型;
数组变量属引用类型,数组可以看作是对象,数组中每个元素相当于该对象的成员变量;
数组本身就是对象,java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
数组使用
package com.wang.array; import javafx.scene.transform.Scale; import java.util.Scanner; public class Demo01 { public static void main(String[] args) { int[] nums;//声明数组 nums=new int[10];//创建数组,数组中可存放十个int类型的数字 Scanner scanner=new Scanner(System.in); System.out.println("给数组中元素赋值"); for(int i=0;i<nums.length;i++){ nums[i]=scanner.nextInt(); } //计算所有元素的和 int sum=0; for(int i=0;i<nums.length;i++){ sum=sum+nums[i]; } System.out.println(sum); } } 一元数组 public static void main(String[] args) { int[] array={1,2,3,4,5}; //打印数组元素 for(int i=0;i<array.length;i++){ System.out.println(array[i]); } //计算所有元素的和 int sum=0; for(int i=0;i<array.length;i++){ sum=sum+array[i]; } System.out.println(sum); //查找最大元素 int max=array[0]; for(int i=0;i<array.length;i++){ if(array[i]>max){ max=array[i]; } } System.out.println(max); //增强型for循环 for (int i : array) { System.out.println(i); } } 二元数组 public static void main(String[] args) { int[][] a={{1,2},{2,3},{3,4},{4,5}}; for (int i=0;i<a.length;i++){ for(int j=0;j<a[i].length;j++){ System.out.println(a[i][j]); } } }
Arrays类
数组工具类java.util.Arrays
数组本身并没有什么方法可以供我们调用,但在API中提供了一个工具类Arrays供我们使用,从而对数据对象进行一些基本操作
Arrays类中的方法都是static修饰的静态方法,在使用的时候直接使用类名进行调用,而不用使用对象来调用。
常用功能:给数组赋值:fill方法
给数组排序:sort方法
比较数组:equals方法比较数组中元素值是否相等
查找数组元素:通过binarySearch方法能对排好序的数组进行二分查找法操作
冒泡排序法
package com.wang.array; import java.util.Arrays; //冒泡排序法 public class Demo06 { public static void main(String[] args) { int[] a={3,2,0,54,214,55,4,0}; int[] sort=sort(a);//调用完自己写的排序方法后,返回一个排序后的数组 System.out.println(Arrays.toString(sort)); } public static int[] sort(int[] array){ for(int i=0;i<array.length-1;i++){ for (int j=0;j<array.length-1-i;j++){ if(array[j+1]<array[j]){ int temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } } } return array; } }
稀疏数组
当一个数组中大部分元素为0,或者为同一值得数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方法: 记录数组一共有几行几列,有多少个不同值
把具有不同值得元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
package com.wang.array; import java.util.Arrays; //稀疏数组 public class Demo07 { 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 i=0;i<array1.length;i++){ for(int j=0;j<array1[i].length;j++){ System.out.print(array1[i][j]+"\t"); } System.out.println(); } //转换为稀疏数组 //获取有效值的个数 int sum=0; for(int i=0;i<11;i++){ for(int j=0;j<11;j++){ if(array1[i][j]!=0){ sum++; } } } System.out.println(sum); //创建一个稀疏数组 int[][] array2=new int[sum+1][3]; array2[0][0]=11; array2[0][1]=11; array2[0][2]=sum; //遍历二维数组,将非零的值存放到稀疏数组中 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]; } } } System.out.println("输出稀疏数组"); for (int i=0;i<array2.length;i++){ System.out.println(array2[i][0]+"\t" +array2[i][1]+"\t" +array2[i][2]+"\t"); } System.out.println("还原稀疏数组:"); //读取稀疏数组的值 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]; } //打印 for(int i=0;i<array3.length;i++){ for(int j=0;j<array3[i].length;j++){ System.out.print(array3[i][j]+"\t"); } System.out.println(); } } }