数组的概述
- 数组是相同类型数据的有序集合
- 数组表述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
- 其中每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问他们
数组的声明创建
- 首先必须声明数组变量,才能在程序中使用数组
定义 - int[ ] nums; //声明一个数组
nums=new [10]; //创建一个数组 - int a[ ];(效果和上面相同,但不是首选方法)
- 数组下标越界异常 java.lang.ArrayIndexOutOfBoundsException
- 静态初始化:
- int[ ] a={1,2,3,4,5,6,7};
- 动态初始化:
- int[ ] b=new int[10];
b[0]=10;
数组的四个基本特点
- 长度是确定的,数组一旦创建,长度不可改变
- 元素必须是相同类型,不允许出现混合类型
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型
- 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量,数组本身就是对象,Java中对象储存在堆中,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
数组的使用
- 高效for循环:快捷写法:(数组名).for
public static void main(String[] args){
int[] arrays={1,2,3,4,5};
printArray(arrays);
int[] reverse=reverse(arrays);
}
public static int[] reverse(int[] arrays){
int[] result=new int[arrays.length];
for(int i=0,j=result.length-1;i<arrays.length;i++,j--){
result[j]=arrays[i];
}
return result;
}
public static void printArray(int[] arrays){
for(int i=0;i<arrays.length;i++){
System.out.print(arrays[i]+" ");
}
}
Arrays类
- Arrays类中的方法都是static修饰的静态方法,在使用的时候可以通过类名直接进行调用,而不用使用对象调用(注意是不用而不是不能)
- Arrays.toString() 打印数组元素
int []a={1,2,3,4,5,6,7};
public static void printArray(int[]a){
for(int i=0;i<a.length;i++){
if(i==0){
System.out.print("[");
}
if(i==a.length-1){
System.out.print(a[i]+"]");
}else{
System.out.print(a[i]+", ");
}
}
}
- Arrays.sort() 对数组进行排序
- Arrays.fill() 数组填充,将指定的字节分配给数组中的每个元素
冒泡排序
- 比较数组中,两个相邻的元素,如果第一个比第二个大,我们就交换他们的位置
- 每一次比较都会产生一个最大,或最小的数字
- 下一轮可以少一次排序
- 依次循环,直到结束!
public static void main(String[] args){
int a={1,5,3,9,45,65,23,11,32};
int[] sort=sort(a);
System.out.println(Arrays.toString(sort));
}
public static int[] sort(int[]array){
int temp=0;
for(int i=0;i<a.length-1;i++){
boolean flag=false;
for(int j=0;j<a.length-1-i;j++){
if(array[j+1]>array[j]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
flag=true;
}
}
if(flag==false){
break;
}
}
return array;
}
稀疏数组
- 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
- 稀疏数组的处理:
- 记录数组一共有几行几列,有多少个不同值
- 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
public static void main(String[] args){
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();
}
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][]=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];
}
System.out.println("输出还原的数组");
for(int[] ints:array3){
for(int anInt:ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
}