《Java从入门到精通》第五章学习笔记

时间:2021-03-01 20:32:33

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