第5章 数组
一、一维数组
1、创建
一维数组实质上是一组相同类型数据的集合,在Java中数组不属于数据类型,而是一种对象。 数组的两种声明方式:
int[] arr1;
int arr2[];
数组声明之后,在使用之前还需要先分配内存空间:
arr1=new int[3]; //数组元素个数为3,即长度为3;arr2=new int[2];
声明和分配空间也可以一并操作:
int arr1[]=new int[3];
int arr2[]=new int[2];
元素赋值的两种方法:
arr1[]=new int[]{1,2,3};
arr2[]={4,5};
1 //找出一维数组中的最小值元素 2 public class ArrayMinNum { 3 public static void main(String[] args){ 4 int arr[]=new int[]{12,398,25,1024,414,1973,2,520,1013}; 5 int tempMin=arr[0]; //最小值暂存器,初始值为第一个元素值 6 int markNumber=1; //位置标识符 7 for(int j=1;j<arr.length;j++){ 8 if(tempMin>arr[j]){ 9 tempMin=arr[j]; 10 markNumber=j+1; 11 } 12 } 13 System.out.println("数组arr中最小值是"+tempMin+";是数组中第"+markNumber+"个元素"); 14 } 15 }
二、二维数组
二维数组中各元素实际上是一维数组,创建、分配空间及赋值类似:
int arr[][]; //声明创建 arr=new int[2][3] //分配2*3个元素空间 arr={{1,2,3},{4,5,6}}; //赋值 int arrx[][]=new int[][]{{1,2},{3,4},{5,6}}; //创建+分配+赋值
1 //对一个二维数组进行转置操作 2 public class ArraySwap { 3 public static void main(String[] args) { 4 int arr1[][]=new int[][]{{1,2,3},{4,5,6},{7,8,9}}; 5 int arr2[][]=new int[3][3]; 6 for(int i=0;i<arr1.length;i++){ 7 for(int j=0;j<arr1[i].length;j++){ 8 arr2[j][i]=arr1[i][j]; 9 } 10 } 11 for(int i=0;i<arr1.length;i++){ 12 for(int j=0;j<arr1[i].length;j++){ 13 System.out.print(arr1[i][j]+" "); 14 } 15 System.out.println(""); 16 } 17 for(int i=0;i<arr2.length;i++){ 18 for(int j=0;j<arr2[i].length;j++){ 19 System.out.print(arr2[i][j]+" "); 20 } 21 System.out.println(""); 22 } 23 } 24 }
三、数组的基本操作
1、通过for方法的遍历元素
//1、二维数组的元素遍历输出 public class ArrayTrap { public static void main(String[] args){ int arr[][]=new int[][]{{1,3,5,7},{2,4,6},{0,10}}; System.out.println("for循环常规方法:"); for(int i=0;i<arr.length;i++){ for(int j=0;j<arr[i].length;j++){ System.out.print(arr[i][j]+" "); } System.out.println(""); } System.out.println("foreach方法:"); for(int arrx[]:arr){ for(int a:arrx){ System.out.print(a+" "); } System.out.println(""); } } }
2、填充替换数组元素
(1)fill(int[] a,int value)方法:将value的值赋给数组a中每一个元素,该方法的返回值为更改后的数组a。
(2)fill(int[] a,int fromIndex,int toIndex,int value):将value的值赋给数组a中的元素,范围从索引为fromIndex的元素开始,到索引为toIndex的元素结束不包括该元素,该方法的返回值为更改后的数组a。
1 //将数组中部分元素更改值 2 import java.util.Arrays; 3 public class ArrayDisplace { 4 public static void main(String[] args){ 5 int arr[]=new int[]{13,8,9,520,14,4,24,27}; 6 System.out.println("填充前数组为:"); 7 for(int x:arr){ 8 System.out.print(x+" "); 9 } 10 Arrays.fill(arr,1,4,520); 11 System.out.println("填充后数组为:"); 12 for(int x:arr){ 13 System.out.print(x+" "); 14 } 15 } 16 }
3、复制数组
(1)copyOf(arr,int newlength):arr是要进行复制的数组。newlength用于指定赋值后新数组的长度,如该长度大于arr长度,则其余用0填充(整型数组)或null(char型数组)。如果newlength小于arr长度,则按newlength截取。返回值为复制后的新数组。
(2)copyOfRange(arr,int fromIndex,int toIndex):复制范围从索引为fromIndex的元素开始,到索引为toIndex的元素结束不包括该元素,该方法的返回值为复制后的新数组。
四、实例
1 //用冒泡法从小到大排序数组元素 2 public class BubbleSortArray { 3 public static void main(String[] args){ 4 int ourArray[]=new int[]{1973,10,1013,24,414,4,1980,520,13,19999}; 5 int temp; 6 System.out.println("排序前:"); 7 for(int x:ourArray){ 8 System.out.print(x+" "); 9 } 10 for(int i=1;i<ourArray.length;i++){ 11 for(int j=0;j<ourArray.length-i;j++){ 12 if(ourArray[j]>ourArray[j+1]){ 13 temp=ourArray[j+1]; 14 ourArray[j+1]=ourArray[j]; 15 ourArray[j]=temp; 16 } 17 } 18 } 19 System.out.println("排序后:"); 20 for(int x:ourArray){ 21 System.out.print(x+" "); 22 } 23 } 24 }
1 //创建一个int型二维数组,求各元素之和并打印 2 public class ArraySum { 3 public static void main(String[] args){ 4 int arr[][]=new int[][]{{13,414,73},{10,24,80},{2012,10,13},{520,13,14}}; 5 int sum=0; 6 for(int a[]:arr){ 7 for(int x:a){ 8 sum+=x; 9 } 10 } 11 System.out.println("二维数组arr各元素总和为"+sum); 12 } 13 }