多维数组

151 阅读5分钟

这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战 | 创作学习持续成长,夺宝闯关赢大奖 - 掘金 (juejin.cn)

3.数组元素的默认初始化值

数组是引用类型,它的元素相当于类的成员变量,因此数组一经 分配空间,其中的每个元素也被按照成员变量同样的方式被隐式 初始化。

  • 对于基本数据类型而言,默认初始化值各有不同
  • 对于引用数据类型而言,默认初始化值为null(注意与0不同!)
public class ArrayTest1 {
    public static void main(String[] args) {
        //5.数组元素的默认初始化值
        int [] arr = new int[4];
        
        for(int i = 0;i < arr.length;i++) {
            System.out.println(arr[i]);
        }
        System.out.println("******************");
        short [] arr1 = new short[4];
        
        for(int i = 0;i < arr.length;i++) {
            System.out.println(arr1[i]);
        }
        
        System.out.println("******************");
        double [] arr2 = new double[4];
        
        for(int i = 0;i < arr2.length;i++) {
            System.out.println(arr2[i]);
        }
        
        System.out.println("******************");
        char [] arr3 = new char[4];
        
        for(int i = 0;i < arr3.length;i++) {
            System.out.println("----" + arr3[i] + "----");
        }
        
        if(arr3[0] == 0) {
            System.out.println("hello");
        }
        
        System.out.println("******************");
        boolean [] arr4 = new boolean[4];
        System.out.println(arr4[2]);
        
        
        System.out.println("******************");
        String[] arr5 = new String[4];
        System.out.println(arr5[0]);
    }
}

4.一维数组的内存分析

image.png

image.png

image.png

image.png

(三)多维数组的使用

  • Java 语言里提供了支持多维数组的语法。
  • 如果说可以把一维数组当成几何中的线性图形, 那么二维数组就相当于是一个表格。
  • 对于二维数组的理解,我们可以看成是一维数组 array1又作为另一个一维数组array2的元素而存 在。其实,从数组底层的运行机制来看,其实没 有多维数组。

1.二维数组的声明和初始化

image.png

image.png public class ArrayTest2 { public static void main(String[] args) { //1.二维数组的声明和初始化 int[] arr = new int[] {1,2,3};//一维数组 //静态初始化 int[][] arr1 = new int[][] {{1,2,3},{4,5},{6,7,8}};//二维数组 //动态初始化1 String[][] arr2 = new String[3][2]; //动态初始化2 String[][] arr3 = new String[3][];//只初始化了二维数组的行

	//其他正确初始化
	int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
	int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};//类型推断一维数组同理
	int arr6[] = {1,2,3,4};//定义与赋值分开写的话不可类型推断
	
	
	//2.如何调用数组的指定位置的元素
	
	System.out.println(arr1[0][1]);//2
	System.out.println(arr2[1][1]);//null

// System.out.println(arr3[1][0]);//arr3定义不完全不知道具体有几列,报错指针异常 arr3[1] = new String[4];//初始化二维数组的列 System.out.println(arr3[1][0]);//null

	//3.如何获取数组的长度
	System.out.println(arr4.length);//3
	System.out.println(arr4[1].length);//4
	
	//4.如何遍历数组
	for(int i = 0;i < arr4.length;i++) {
		for(int j = 0;j < arr4[i].length;j++) {
			System.out.print(arr4[i][j] + "\t");
		}
		System.out.println();
	}
}


}

2.二维数组元素的初始化默认值

规定:二维数组分为外层数组的元素和内层数组的元素

  • int arr = new int4;
  • 外层元素:arr[0],arr[1]等
  • 内层元素:arr0,arr1

数组元素的初始化默认值

针对于初始化方式一,比如:int arr = new int4;

外层元素的初始值为地址值

内层元素的初始值与一维数组的初始值一致

针对于初始化方式二,比如:int arr = new int4;

外层元素的初始值为null

内层元素报错空指针异常

/*
 * 二维数组
 *  
 * 规定:二维数组分为外层数组的元素和内层数组的元素
 *      int[][] arr = new int[4][3];
 *      外层元素:arr[0],arr[1]等
 *      内层元素:arr[0][0],arr[1][2]等
 * 
 *  数组元素的初始化默认值
 *      针对于初始化方式一,比如:int[][] arr = new int[4][3];
 *          外层元素的初始值为地址值
 *          内层元素的初始值与一维数组的初始值一致
 *      针对于初始化方式二,比如:int[][] arr = new int[4][];
 *          外层元素的初始值为null
 *          内层元素报错空指针异常
 * 
 *  数组的内存解析
 * 
 * 
 * */
public class ArrayTest3 {
    public static void main(String[] args) {
        // 5.数组元素的初始化默认值
        int[][] arr = new int[4][3];// 动态声明
        System.out.println(arr[0]);// 地址值
        System.out.println(arr[0][0]);// 0
//      System.out.println(arr);//地址
​
        System.out.println("**********************");
​
        float[][] arr1 = new float[4][3];// 动态声明
        System.out.println(arr1[0]);// 地址值
        System.out.println(arr1[0][0]);// 0.0
​
        System.out.println("**********************");
​
        String[][] arr2 = new String[4][3];// 动态声明
        System.out.println(arr2[1]);// 地址值
        System.out.println(arr2[1][1]);// null
​
        System.out.println("**********************");
​
        String[][] arr3 = new String[4][];// 动态声明
        System.out.println(arr3[1]);// 内层数组未定义,外层数组为默认值null
//      System.out.println(arr3[1][1]);// 内层数组未定义,报错空指针
        // 6.数组的内存解析
​
    }
}

3.二维数组的内存分析

image.png

image.png

image.png

image.png

(四)数组中涉及到的常见算法

1.数组元素的赋值(杨辉三角、回形数等)

2.求数值型数组中元素的最大值、最小值、平均数、总和等

3.数组的复制、反转、查找(线性查找、二分法查找)

4.数组元素的排序算法

image.png

image.png

(五)Arrays工具类的使用

java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比 如排序和搜索)的各种方法。

image.png

package com.taiacloud.java;
​
import java.util.Arrays;
​
/*
 * 数组工具类Arrays的使用,java.util.Arrays
 * 
 *  1 boolean equals(int[] a,int[] b)   判断两个数组是否相等。
 *  2 String toString(int[] a)  输出数组信息。
 *  3 void fill(int[] a,int val)    将指定值填充到数组之中。
 *  4 void sort(int[] a)    对数组进行排序。
 *  5 int binarySearch(int[] a,int key)     对排序后的数组进行二分法检索指定的值。
 * 
 * */
public class ArraysTest {
    public static void main(String[] args) {
        //1 boolean equals(int[] a,int[] b)     判断两个数组是否相等。
        int [] arr1 = new int[] {1,2,3,4};
        int [] arr2 = new int[] {1,3,2,4};
        
        boolean isEquals = Arrays.equals(arr1, arr2);
        System.out.println(isEquals);//false
        
        //2 String toString(int[] a)    输出数组信息。
        System.out.println(Arrays.toString(arr2));
        
        //3 void fill(int[] a,int val)  将指定值填充到数组之中,把原数组中每一个元素都进行替换。
        Arrays.fill(arr1,10);
        System.out.println(Arrays.toString(arr1));
        
        //4 void sort(int[] a)  对数组进行排序。
        Arrays.sort(arr2);
        System.out.println(Arrays.toString(arr2));
        
        //5 int binarySearch(int[] a,int key)   对排序后的数组进行二分法检索指定的值。
        
         int isFind = Arrays.binarySearch(arr2,4);
         System.out.println(isFind);//找到之后返回指定值的索引,找不到则返回一个负数
        
    }
}
​

(六)数组使用中的常见异常

image.png

package com.taiacloud.java;

import java.util.Arrays;

/*
 *  数组中的常见异常
 *  1.数组脚标越界的异常 	ArrayIndexOutOfBoundsExcetion
 *  2.空指针异常	NullPointerExcetion
 * 
 * 
 * */
public class ArrayException {
	public static void main(String[] args) {
		
		// 1.数组脚标越界的异常 	ArrayIndexOutOfBoundsExcetion
//		int [] arr = new int[] {1,2,3,4};
//		for(int i = 0;i <= arr.length;i++) {
//			System.out.print(arr[i] + "\t");
//		}
		
		
		//2.空指针异常	NullPointerExcetion
		//情况一
//		int[] arr1 = new int[] {1,2,3};
//		arr1 = null;
//		System.out.println(arr1[0]);
		
		//情况二
//		int [][] arr2 = new int[4][];
//		System.out.println(arr2[0][0]);
		
		//情况三
		String[] arr3 = new String[] {"AA","BB","CC"};
		arr3[0] = null;
		System.out.println(arr3[0].toString());
			//数组名【脚标】.toString() 输出数组中指定脚标的元素
			//Arrays.toString(数组名) 遍历输出数组
	}
}