第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 }